from bisect import * def minimumZooNumbers(m, n, t, s, d): ds,de = [0]*(m+5),[0]*(m+5) cs,ce = [0]*(m+5),[0]*(m+5) dp = [0]*(m+1) for i in range(n): if t[i]=='C':cs[s[i]]+=1;ce[d[i]]+=1 if t[i]=='D':ds[s[i]]+=1;de[d[i]]+=1 for i in range(1,m+1): cs[i]+=cs[i-1];ce[i]+=ce[i-1] ds[i]+=ds[i-1];de[i]+=de[i-1] for i in range(1,m+1): dp[i] = dp[i-1] for j in range(i): dp[i] = max(dp[i],dp[j]+de[i]-ds[j-1]) dp[i] = max(dp[i],dp[j]+ce[i]-cs[j-1]) ans = [0]*n for i in range(1,n+1): ans[i-1] = bisect_left(dp,i) if ans[i-1]>m:ans[i-1]=-1 return ans if __name__ == "__main__": cases = int(input().strip()) for a0 in range(cases): m, n = input().strip().split(' ') m, n = [int(m), int(n)] t = input().strip().split(' ') for i in range(n): if t[i]=='M': t[i]='D' if t[i]=='E': t[i]='C' s = list(map(int, input().strip().split(' '))) d = list(map(int, input().strip().split(' '))) result = minimumZooNumbers(m, n, t, s, d) print (" ".join(map(str, result)))