#!/bin/python import sys import itertools # state variables: drops, animals, EC = {1,-1,0} elephant and cats or dogs and mice # last destination is limiting one # alt state variable: drops, ecs, dms (by destination) # class cargo? of just pairs ('E',1) const = 10**5 def drop(z,cargo): new_cargo = [p for p in cargo if p != z] return len(cargo) - len(new_cargo), new_cargo def possi(dests): ans = [] limit = sorted(list(set(dests))) for l in limit: ans.append([d for d in dests if d <= l]) return ans def makeds(m,n,t,s,d): ecds = {i:[] for i in xrange(1,m+1)} dmds = {i:[] for i in xrange(1,m+1)} for i in xrange(n): if t[i] == 'E' or t[i] == 'C': ecds[s[i]].append(d[i]) else: dmds[s[i]].append(d[i]) return ecds, dmds # ecs always first def minimumZooNumbers(m, n, t, s, d): ecds, dmds = makeds(m,n,t,s,d) ans = {i:const for i in xrange(1,n+1)} states = [] states.append([0,[],[]]) for z in xrange(1,m+1): #print z, states new_states = [] for s in states: #temp = [] drops, ecs, dms = s[0],s[1],s[2] temp1, ecs = drop(z,ecs) temp2, dms = drop(z,dms) drops += temp1 + temp2 new_states.append([drops,ecs,dms]) # no pickups for i in xrange(1,drops+1): ans[i] = min(ans[i],z) poss1, poss2 = [], [] if ecs: poss1 = possi(ecds[z]) elif dms: poss2 = possi(dmds[z]) else: poss1 = possi(ecds[z]) poss2 = possi(dmds[z]) for p in poss1: new_states.append([drops,ecs+p,dms]) for p in poss2: new_states.append([drops,ecs,dms+p]) #new_states += temp states = new_states pre = [ans[i] for i in xrange(1,n+1)] post = [] for x in pre: if x == const: post.append(-1) else: post.append(x) return post # Return a list of length n consisting of the answers if __name__ == "__main__": cases = int(raw_input().strip()) for a0 in xrange(cases): m, n = raw_input().strip().split(' ') m, n = [int(m), int(n)] t = raw_input().strip().split(' ') s = map(int, raw_input().strip().split(' ')) d = map(int, raw_input().strip().split(' ')) result = minimumZooNumbers(m, n, t, s, d) print " ".join(map(str, result))