import sys, math sys.setrecursionlimit(10**8) sys.set_int_max_str_digits(0) INF = 1e18 MOD = 998244353 from bisect import bisect_left, bisect_right from collections import deque, defaultdict, Counter from itertools import product, combinations, permutations, groupby, accumulate from heapq import heapify, heappop, heappush def I(): return sys.stdin.readline().rstrip() def II(): return int(sys.stdin.readline().rstrip()) def IS(): return sys.stdin.readline().rstrip().split() def MII(): return map(int, sys.stdin.readline().rstrip().split()) def LI(): return list(sys.stdin.readline().rstrip()) def TII(): return tuple(map(int, sys.stdin.readline().rstrip().split())) def LII(): return list(map(int, sys.stdin.readline().rstrip().split())) def LSI(): return list(map(str, sys.stdin.readline().rstrip().split())) def GMI(): return list(map(lambda x: int(x) - 1, sys.stdin.readline().rstrip().split())) def kiriage(a, b): return (a+b-1)//b def chmax(DP,i,v): if DP[i] < v: DP[i] = v def chmin(DP,i,v): if DP[i] > v: DP[i] = v T = II() for i in range(T): N, M, K = MII() G = [set() for _ in range(N)] jisu = [0] * (N) for i in range(M): u, v = MII() u -= 1 v -= 1 G[u].add(v) G[v].add(u) jisu[u] += 1 jisu[v] += 1 A = [0] * N B = LII() # 最初だけ全探索し、尻尾を捕まえる jisu1 = [] # stack でなくて que でやってもよい for i in range(N): if jisu[i] == 1: jisu1.append(i) while len(jisu1) > 1: pos = jisu1.pop() # pos から行ける頂点の入次数を1減らす nex = G[pos].pop() jisu[nex] -= 1 # nex で帳尻をあわせる diff = (B[pos] - A[pos])%K A[pos] = B[pos] # diff を nex にも押し付ける A[nex] = (A[nex] + diff)%K if jisu[nex] == 1: jisu1.append(nex) G[nex].remove(pos) if A == B: print('Yes') else: print('No')