#include using namespace std; #define f first #define s second #define pii pair #define p3i pair #define maxn 50000 #define pb push_back int pari[256]; int n, m; vector adj[maxn + 1][2]; int jaw[maxn + 1], st[maxn + 1], ds[maxn + 1], typ[maxn + 1], dp[maxn + 1][2]; void init() { for(int j = 0; j <= m; j++) { adj[j][0].clear(); adj[j][1].clear(); } for(int i = 1; i <= n; i++) { jaw[i] = INT_MAX; } } int main() { // ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int tes; char kar; cin >> tes; while(tes--) { cin >> m >> n; init(); for(int i = 0; i < n; i++) { cin >> kar; typ[i] = (kar == 'E' || kar == 'C'); } for(int i = 0; i < n; i++) { cin >> st[i]; } for(int i = 0; i < n; i++) { cin >> ds[i]; } for(int i = 0; i < n; i++) { if(st[i] > ds[i]) { continue; } adj[ds[i]][typ[i]].pb(st[i]); } for(int j = 1; j <= m; j++) { sort(adj[j][0].begin(), adj[j][0].end()); sort(adj[j][1].begin(), adj[j][1].end()); } int sis; for(int j = 1; j <= m; j++) { for(int k = 0; k < 2; k++) { sis = (int)adj[j][k].size(); dp[j][k] = dp[j - 1][k] + sis; for(int i = sis - 1; i >= 0; i--) { dp[j][k] = max(dp[j][k], dp[adj[j][k][i]][k ^ 1] + sis - i); } } } for(int j = m; j >= 0; j--) { for(int k = 0; k < 2; k++) { jaw[dp[j][k]] = j; } } for(int i = n - 1; i >= 1; i--) { jaw[i] = min(jaw[i], jaw[i + 1]); } for(int i = 1; i <= n; i++) { if(jaw[i] == INT_MAX) { jaw[i] = -1; } } cout << jaw[1]; for(int i = 2; i <= n; i++) { cout << " " << jaw[i]; } cout << "\n"; } }