#include using namespace std; #define ll long long #define MOD 1000000007 #define sc(n) scanf("%d",&n) #define scl(n) scanf("%lld",&n) #define p(n) printf("%d",&n) #define fi first #define sec second #define mp make_pair #define pb push_back map< int , map > start[50005]; int a[50005]; int s[50005]; int d[50005]; int typ[50005]; int ans[50005]; int dp[50005]; int conv(string ty) { if(ty == "C"){ return 0; } if(ty == "D"){ return 1; } if(ty == "E"){ return 2; } if(ty == "M"){ return 3; } return 4; } int main() { int i,j,k,l,m,n,t,r,cnt; int flag; ll an; cin >> t; while(t--){ memset(dp,0,sizeof(dp)); memset(ans,-1,sizeof(ans)); cin >> m >> n; string ty; for(i = 0;i < m;i++){ start[i].clear(); } for(j = 0;j < n;j++){ cin >> ty; typ[j] = conv(ty); } for(j = 0;j < n;j++){ cin >> s[j]; s[j]--; } for(i = 0;i < n;i++){ cin >> d[i]; d[i]--; } for(i = 0;i < n;i++){ //cout << d[i] << endl; start[s[i]][d[i]][typ[i]] += 1; } dp[0] = 0; int cnt1,cnt2; for(i = 0;i < m;i++){ if(i != 0) dp[i] = max(dp[i],dp[i-1]); cnt1 = 0; cnt2 = 0; for(auto it : start[i]){ k = it.fi; //cout << "k = " << k << endl; for(j = 0;j < 4;j++){ if(j == 0 || j == 2){ cnt1 += start[i][k][j]; } else{ cnt2 += start[i][k][j]; } } dp[k] = max(dp[k],dp[i] + max(cnt1,cnt2)); } // cout << i << " = " << dp[i] << endl; } // cout << endl; for(i = 1;i <= n;i++){ ans[i] = (int)(lower_bound(dp,dp+m,i) - dp); if(ans[i] == m){ ans[i] = -2; } cout << ans[i]+1 << " "; } cout << endl; } }