import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int T = s.nextInt(); a:for (int t = 0; t < T; t++) { int n = s.nextInt(); int m = s.nextInt(); long k = s.nextInt(); ArrayList> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { int u = s.nextInt() - 1; int v = s.nextInt() - 1; list.get(u).add(v); list.get(v).add(u); } long[] A = new long[n]; long[] b = new long[n]; for (int i = 0; i < n; i++) { b[i] = s.nextInt(); } boolean[] visited = new boolean[n]; boolean[] visited2 = new boolean[n]; ArrayDeque queue = new ArrayDeque<>(); int[] size = new int[n]; for (int i = 0; i < n; i++) { if (list.get(i).size() == 1) { queue.add(i); visited[i] = true; } size[i] = list.get(i).size(); } while (!queue.isEmpty()) { int j = queue.poll(); visited2[j]=true; ArrayList l = list.get(j); for (int o = 0; o < l.size(); o++) { int p = l.get(o); if (visited2[p]) { } else { A[p] += ((b[j] - A[j]) % k) + k; A[p] %= k; A[j] = b[j]; size[p]--; if (size[p] == 1&&!visited[p]) { queue.add(p); visited[p]=true; } } } } for (int i = 0; i < n; i++) { if (A[i] != b[i]) { System.out.println("No"); continue a; } } System.out.println("Yes"); } } }