import sys
from itertools import permutations
def blocks_can_block(n, s, cnt0, cnt1, cnt2):
full_mask = (1 << (s+1)) - 1
for order in permutations((0,1,2), 3):
# build the clustered array
arr = []
for v in order:
if v == 0:
arr += [0]*cnt0
elif v == 1:
arr += [1]*cnt1
else:
arr += [2]*cnt2
# bitset DP: dp[i] is an int whose bits represent which sums are reachable at index i
dp = [0]*n
dp[0] = 1 << arr[0]
# we'll do up to n*(s//min_nonzero+1) iterations, but break early
# since min_nonzero is 1, that's n*(s+1) worst case
for _ in range(n*(s+1)):
new_dp = [0]*n
for i in range(n):
# shift the neighbor‐masks by arr[i] and OR together
m = 0
if i>0:
m |= dp[i-1]
if i+1<n:
m |= dp[i+1]
# move along i by picking up arr[i]
new_dp[i] = (m << arr[i]) & full_mask
if new_dp == dp:
break
dp = new_dp
# if bit s is NOT set at index n-1, Alice cannot reach exactly s
if not (dp[n-1] >> s) & 1:
return arr
return None
def main():
input = sys.stdin.readline
t = int(input())
out = []
for _ in range(t):
n, s = map(int, input().split())
a = list(map(int, input().split()))
cnt0, cnt1, cnt2 = a.count(0), a.count(1), a.count(2)
ans = blocks_can_block(n, s, cnt0, cnt1, cnt2)
if ans is None:
out.append("-1")
else:
out.append(" ".join(map(str, ans)))
sys.stdout.write("\n".join(out))
if __name__ == "__main__":
main()
aW1wb3J0IHN5cwpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCgpkZWYgYmxvY2tzX2Nhbl9ibG9jayhuLCBzLCBjbnQwLCBjbnQxLCBjbnQyKToKICAgIGZ1bGxfbWFzayA9ICgxIDw8IChzKzEpKSAtIDEKICAgIGZvciBvcmRlciBpbiBwZXJtdXRhdGlvbnMoKDAsMSwyKSwgMyk6CiAgICAgICAgIyBidWlsZCB0aGUgY2x1c3RlcmVkIGFycmF5CiAgICAgICAgYXJyID0gW10KICAgICAgICBmb3IgdiBpbiBvcmRlcjoKICAgICAgICAgICAgaWYgdiA9PSAwOgogICAgICAgICAgICAgICAgYXJyICs9IFswXSpjbnQwCiAgICAgICAgICAgIGVsaWYgdiA9PSAxOgogICAgICAgICAgICAgICAgYXJyICs9IFsxXSpjbnQxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBhcnIgKz0gWzJdKmNudDIKCiAgICAgICAgIyBiaXRzZXQgRFA6IGRwW2ldIGlzIGFuIGludCB3aG9zZSBiaXRzIHJlcHJlc2VudCB3aGljaCBzdW1zIGFyZSByZWFjaGFibGUgYXQgaW5kZXggaQogICAgICAgIGRwID0gWzBdKm4KICAgICAgICBkcFswXSA9IDEgPDwgYXJyWzBdCgogICAgICAgICMgd2UnbGwgZG8gdXAgdG8gbioocy8vbWluX25vbnplcm8rMSkgaXRlcmF0aW9ucywgYnV0IGJyZWFrIGVhcmx5CiAgICAgICAgIyBzaW5jZSBtaW5fbm9uemVybyBpcyAxLCB0aGF0J3MgbioocysxKSB3b3JzdCBjYXNlCiAgICAgICAgZm9yIF8gaW4gcmFuZ2UobioocysxKSk6CiAgICAgICAgICAgIG5ld19kcCA9IFswXSpuCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICAgICAgIyBzaGlmdCB0aGUgbmVpZ2hib3LigJBtYXNrcyBieSBhcnJbaV0gYW5kIE9SIHRvZ2V0aGVyCiAgICAgICAgICAgICAgICBtID0gMAogICAgICAgICAgICAgICAgaWYgaT4wOgogICAgICAgICAgICAgICAgICAgIG0gfD0gZHBbaS0xXQogICAgICAgICAgICAgICAgaWYgaSsxPG46CiAgICAgICAgICAgICAgICAgICAgbSB8PSBkcFtpKzFdCiAgICAgICAgICAgICAgICAjIG1vdmUgYWxvbmcgaSBieSBwaWNraW5nIHVwIGFycltpXQogICAgICAgICAgICAgICAgbmV3X2RwW2ldID0gKG0gPDwgYXJyW2ldKSAmIGZ1bGxfbWFzawogICAgICAgICAgICBpZiBuZXdfZHAgPT0gZHA6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBkcCA9IG5ld19kcAoKICAgICAgICAjIGlmIGJpdCBzIGlzIE5PVCBzZXQgYXQgaW5kZXggbi0xLCBBbGljZSBjYW5ub3QgcmVhY2ggZXhhY3RseSBzCiAgICAgICAgaWYgbm90IChkcFtuLTFdID4+IHMpICYgMToKICAgICAgICAgICAgcmV0dXJuIGFycgoKICAgIHJldHVybiBOb25lCgpkZWYgbWFpbigpOgogICAgaW5wdXQgPSBzeXMuc3RkaW4ucmVhZGxpbmUKICAgIHQgPSBpbnQoaW5wdXQoKSkKICAgIG91dCA9IFtdCiAgICBmb3IgXyBpbiByYW5nZSh0KToKICAgICAgICBuLCBzID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQogICAgICAgIGEgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCiAgICAgICAgY250MCwgY250MSwgY250MiA9IGEuY291bnQoMCksIGEuY291bnQoMSksIGEuY291bnQoMikKICAgICAgICBhbnMgPSBibG9ja3NfY2FuX2Jsb2NrKG4sIHMsIGNudDAsIGNudDEsIGNudDIpCiAgICAgICAgaWYgYW5zIGlzIE5vbmU6CiAgICAgICAgICAgIG91dC5hcHBlbmQoIi0xIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBvdXQuYXBwZW5kKCIgIi5qb2luKG1hcChzdHIsIGFucykpKQogICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iLmpvaW4ob3V0KSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkK