from bisect import bisect_left t = int(raw_input()) for _ in xrange(t): n, z = map(int, raw_input().split(' ')) t = raw_input().strip().split(' ') s = map(int, raw_input().split(' ')) d = map(int, raw_input().split(' ')) ae = [] ad = [] ac = [] am = [] for (a, ss, dd) in zip(t, s, d): if a == 'E': ae.append((ss, dd)) elif a == 'D': ad.append((ss, dd)) elif a == 'C': ac.append((ss, dd)) elif a == 'M': am.append((ss, dd)) ae.sort(key=lambda x: -x[1]) ad.sort(key=lambda x: -x[1]) ac.sort(key=lambda x: -x[1]) am.sort(key=lambda x: -x[1]) n += 1 dp = [0] * n de = [0] * n dd = [0] * n dc = [0] * n dm = [0] * n for m in xrange(1, n): de[m] = de[m - 1] dd[m] = dd[m - 1] dc[m] = dc[m - 1] dm[m] = dm[m - 1] add_e = 0 add_d = 0 add_c = 0 add_m = 0 if ae and ae[-1][1] == m: de[m] += 1 add_e = dm[ae[-1][0]] + dd[ae[-1][0]] ae.pop() if ad and ad[-1][1] == m: dd[m] += 1 add_d = de[ad[-1][0]] + dc[ad[-1][0]] ad.pop() if ac and ac[-1][1] == m: dc[m] += 1 add_c = dd[ac[-1][0]] + dm[ac[-1][0]] ac.pop() if am and am[-1][1] == m: dm[m] += 1 add_m = dc[am[-1][0]] + de[am[-1][0]] am.pop() dp[m] = max(dp[m - 1], de[m] + add_e, dd[m] + add_d, dc[m] + add_c, dm[m] + add_m) dp[m] = max(dp[m], de[m] + dc[m], dd[m] + dm[m]) #print de #print dd #print dc #print dm #print dp ret = [] for idx in xrange(1, z + 1): res = bisect_left(dp, idx) if res > m: res = -1 ret.append(res) print ' '.join(map(str, ret))