#!/bin/python3 import sys class driver: def __init__(self, mode, pos, carrying, delivered, m): self.mode = mode self.pos = pos self.carrying = 0 self.delivered = delivered self.dropoff = [0 for i in range(m + 2)] self.spawned = True def advance(self,m,n,t,s,d,drivers): #print("new step") #print("mode = ", self.mode) #print("pos = ", self.pos) #print("delivered = ", self.delivered) #print("dropoff = ", self.dropoff) #print("carrying = ", self.carrying) #print(" ") pos = self.pos self.pos += 1 self.delivered[pos] += self.dropoff[pos] self.carrying -= self.dropoff[pos] if self.carrying == 0 and self.spawned == False and self.pos > 0: self.spawned = True drivers.append(driver((self.mode + 1)%2, self.pos - 1, self.carrying, self.delivered[:], m)) #print(self.mode,(self.mode + 1)%2, self.pos - 1, self.carrying, self.delivered[:], m) for i in range(len(s)): if s[i] == pos: if (t[i] == "E" or t[i] == "C") and self.mode == 0: self.carrying += 1 self.dropoff[d[i]] += 1 if (t[i] == "D" or t[i] == "M") and self.mode == 1: self.carrying += 1 self.dropoff[d[i]] += 1 if self.carrying > 0: self.spawned = False def minimumZooNumbers(m, n, t, s, d): # Return a list of length n consisting of the answers drivers = [] drivers.append(driver(0,0,0,[0 for i in range(m + 2)], m)) drivers.append(driver(1,0,0,[0 for i in range(m + 2)], m)) results = [-1 for i in range(n + 1)] while(len(drivers) > 0): #print(drivers) for driv in drivers: driv.advance(m,n,t,s,d,drivers) if driv.pos == m + 2: count = 0 #print(" ") for i in range(len(driv.delivered)): #print(count, driv.delivered) count += driv.delivered[i] if results[count] == -1 or results[count] > i: results[count] = i drivers.remove(driv) results.pop(0) pen = -1 for i in range(len(results)): if pen != -1 and results[-1 - i] == -1: results[-1 - i] = pen pen = results[-1 - i] return results 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(' ') 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)))