sum_n = sum_m = 0 for _ in range(int(input())): n, m, k = map(int, input().split()); assert 1 <= n <= 2*10**5 and 0 <= m <= min(n*(n-1)//2, 2*10**5) and 1 <= k <= 10**9 sum_n += n sum_m += m node = [[] for _ in range(n)] for _ in range(m): u, v = [int(x)-1 for x in input().split()]; assert 0 <= min(u, v) and max(u, v) < n node[u].append(v) node[v].append(u) B = list(map(int, input().split())) for i in range(n): assert 0 <= B[i] < k D = [-1] * n S = [0] f = 1 while S: now = S.pop() for nxt in node[now]: if D[nxt] == -1: D[nxt] = D[now]^1 S.append(nxt) elif D[now] == D[nxt]: f = 0 if not k % 2 and sum(B) % 2: print("No") elif f and sum([B[i] for i in range(n) if D[i]]) % k != sum([B[i] for i in range(n) if not D[i]]) % k: print("No") else: print("Yes") assert sum_n <= 2*10**5 and sum_m <= 2*10**5