t = int(input()) sum_n = 0 for _ in range(t): n, m, k = map(int, input().split()); assert 1 <= n <= 2*10**5 and m == n-1 and 1 <= k <= 10**9 sum_n += n node = [[] for _ in range(n)] V = [0] * n for _ in range(n-1): 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) V[u] += 1 V[v] += 1 B = list(map(int, input().split())); assert 0 <= min(B) and max(B) < k S = [i for i in range(n) if V[i] == 1] used = [0] * n while S: now = S.pop() used[now] = 1 for nxt in node[now]: if not used[nxt]: B[nxt] -= B[now] B[nxt] %= k B[now] = 0 V[nxt] -= 1 if V[nxt] == 1: S.append(nxt) print("Yes" if not max(B) else "No") assert sum_n <= 2*10**5