#!/bin/python3 import sys import collections def minimumZooNumbers(m, n, t, s, d): animals = sorted(zip(d, s, t)) res = [] excls = buildSets(animals) for i in range(len(animals)): res.append(999999) findMinZoo(animals, i + 1, res, [], excls) if res[-1] == 999999: break if res[-1] == 999999: res[-1] = -1 if len(res) < len(animals): res = res + [-1] * (len(animals) - len(res)) return res def findMinZoo(animals, count, res, route, excls): candidates = set(range(len(animals))).difference(route).difference(set().union(*[excls[i] for i in route])) #print("Route: {}; candidates: {}".format(route, candidates)) if len(route) < count - 1: for c in candidates: findMinZoo(animals, count, res, route + [c], excls) else: for c in candidates: #print("Route: {}, mz: {}".format(route + [c], maxZoo(route + [c], animals))) res[-1] = min(res[-1], maxZoo(route + [c], animals)) def buildSets(animals): excls = [set() for i in range(len(animals))] for i, (d, s, t) in enumerate(animals): for j, (d2, s2, t2) in enumerate(animals): if (s2 < d or d2 < s) and ((t in ("E", "C") and t2 in ("D", "M")) or (t in ("D", "M") and t2 in ("E", "C"))): #print("T: {}, T2: {}".format(t, t2)) excls[i].add(j) #print("Excls: {}".format(excls)) return excls def maxZoo(route, animals): return max([animals[i][0] for i in route]) 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)))