import sys sys.setrecursionlimit(300000) def main(): input = sys.stdin.read data = input().split() iterator = iter(data) try: num_test_cases = int(next(iterator)) except StopIteration: return results = [] for _ in range(num_test_cases): try: N = int(next(iterator)) M = int(next(iterator)) # M = N - 1 K = int(next(iterator)) except StopIteration: break adj = [[] for _ in range(N)] for _ in range(M): u = int(next(iterator)) - 1 v = int(next(iterator)) - 1 adj[u].append(v) adj[v].append(u) B = [] for _ in range(N): B.append(int(next(iterator))) order = [] stack = [0] visited = [False] * N visited[0] = True parent = [-1] * N while stack: u = stack.pop() order.append(u) for v in adj[u]: if not visited[v]: visited[v] = True parent[v] = u stack.append(v) current_val = [0] * N possible = True for i in range(N - 1, -1, -1): u = order[i] have = current_val[u] % K target = B[u] ops_needed = (target - have) % K p = parent[u] if p != -1: current_val[p] = (current_val[p] + ops_needed) % K else: if ops_needed != 0: possible = False if possible: results.append("Yes") else: results.append("No") print('\n'.join(results)) if __name__ == '__main__': main()