#include #define si( x ) scanf("%d", &x) #define sll( x ) scanf("%I64d", &x) #define mp make_pair #define pb push_back #define ff first #define ss second using namespace std; typedef long long ll; int m,n,mi,now,ans[50005]; bool u[50005],ok; struct animal{ char t; int s; int d; } a[50005]; bool can(int id){ for(int i = 1; i <= n; i++){ if(u[i] && a[i].t != a[id].t){ if((a[i].t == 'E' && a[id].t != 'C') || (a[i].t == 'D' && a[id].t != 'M') || (a[i].t == 'C' && a[id].t != 'E') || (a[i].t == 'M' && a[id].t != 'D')){ if(!(a[i].s >= a[id].d || a[i].d <= a[id].s)) return 0; } } } return 1; } void solve(){ memset(u, 0, sizeof u); int i,j,k; si(m), si(n); for(i = 1; i <= n; i++) scanf(" %c", &a[i].t); for(i = 1; i <= n; i++) scanf("%d", &a[i].s); for(i = 1; i <= n; i++) scanf("%d", &a[i].d); ok = 0; for(i = 1; i <= n; i++){ if(a[i].s < a[i].d){ if(ok == 0){ mi = i; ok = 1; } else{ if(a[i].d < a[mi].d) mi = i; } } } if(ok == 0){ printf("-1"); for(i = 2; i <= n; i++) printf(" -1"); } else{ printf("%d", a[mi].d); u[mi] = 1; ans[1] = a[mi].d; for(i = 2; i <= n; i++){ if(ans[i-1] == -1) ans[i] = -1; else{ ok = 0; for(j = 1; j <= n; j++){ if(!u[j] && can(j)){ if(ok == 0){ mi = j; ok = 1; } else{ if(a[j].d < a[mi].d) mi = j; } } } if(ok == 0) ans[i] = -1; else{ u[mi] = 1; ans[i] = a[mi].d; } } } for(i = 2; i <= n; i++){ printf(" %d", ans[i]); } } printf("\n"); } int main(){ int t; si(t); while(t--) solve(); }