#include #include #include using namespace std; void solve() { int n, m, k; cin >> n >> m >> k; vector> g(n); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; --u, --v; g[u].push_back(v); g[v].push_back(u); } vector b(n); for (int i = 0; i < n; ++i) cin >> b[i]; vector dis(n, 1e9); dis[0] = 0; auto dfs = [&](auto f, int now, int p) -> void { for (auto to : g[now]) { if (to == p) continue; if (dis[to] > dis[now] + 1) { dis[to] = dis[now] + 1; f(f, to, now); } } }; dfs(dfs, 0, -1); int isb = 1; for (int i = 0; i < n; ++i) { for (auto to : g[i]) { if (dis[i] % 2 == dis[to] % 2) isb = 0; } } if (isb) { long long sum = 0; for (int i = 0; i < n; ++i) { if (dis[i] % 2) sum += b[i]; else sum -= b[i]; } cout << (sum % k == 0 ? "Yes" : "No") << endl; } else { long long sum[2] = {0}; for (int i = 0; i < n; ++i) sum[dis[i] % 2] += b[i]; int g = __gcd(k, 2); cout << (abs(sum[0] - sum[1]) % g == 0 ? "Yes" : "No") << endl; } } int main() { int t; cin >> t; while (t--) solve(); }