#include using namespace std; int t[500000], S[500000], d[500000]; int f[500000], s[500000]; int re[500000]; int main() { int T; cin >> T; while (T--) { int m, n; char c; cin >> m >> n; for (int i = 1; i <= n; ++i) { cin >> c; if ((c == 'E') || (c == 'C')) { t[i] = 1; } else { t[i] = 0; } } for (int i = 1; i <= n; ++i) { cin >> S[i]; } for (int i = 1; i <= n; ++i) { cin >> d[i]; } vector , int> > a; for (int i = 1; i <= n; ++i) { a.push_back(make_pair(make_pair(d[i], S[i]), t[i])); } for (int i = 1; i <= m + 1; ++i) { re[i] = m + 1; } map mapOdd, mapEven; vector odd, even; sort (a.begin(), a.end()); mapOdd[0] = 0; odd.push_back(0); mapEven[0] = 0; even.push_back(0); for (int i = 0; i < a.size(); ++i) { if (a[i].second) { mapOdd[a[i].first.first] = i + 1; odd.push_back(a[i].first.first); } else { mapEven[a[i].first.first] = i + 1; even.push_back(a[i].first.first); } } sort(odd.begin(), odd.end()); sort(even.begin(), even.end()); memset(f, 0, sizeof(f)); memset(s, 0, sizeof(s)); for (int i = 0; i < n; ++i) { if (a[i].second) { f[i] = max(f[i], s[mapEven[even[upper_bound(even.begin(), even.end(), a[i].first.second) - even.begin() - 1]]]); f[i + 1] = f[i] + 1; re[f[i + 1]] = min(re[f[i + 1]], a[i].first.first); s[i + 1] = s[i]; } else { s[i] = max(s[i], f[mapOdd[odd[upper_bound(odd.begin(), odd.end(), a[i].first.second) - odd.begin() - 1]]]); s[i + 1] = s[i] + 1; re[s[i + 1]] = min(re[s[i + 1]], a[i].first.first); f[i + 1] = f[i]; } } for (int i = 1; i <= n; ++i) { if (re[i] == m + 1) { re[i] = -1; } cout << re[i] << " "; } cout << endl; } return 0; }