#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; template ostream &operator<<(ostream &os, const vector &v) { int n = v.size(); rep(i, 0, n) { os << v[i] << " \n"[i == n - 1]; } return os; } void solve() { int n, m, mod; cin >> n >> m >> mod; vector u(m), v(m); vector> gr(n); rep(i, 0, m) { cin >> u[i] >> v[i], u[i]--, v[i]--; gr[u[i]].emplace_back(v[i]); gr[v[i]].emplace_back(u[i]); } vector a(n), b(n); rep(i, 0, n) cin >> b[i]; if (m > n - 1) { if (mod % 2) { cout << "Yes\n"; return; } int odd = 0; rep(i, 0, n) odd ^= b[i] & 1; bool ok = !odd; cout << (ok ? "Yes\n" : "No\n"); } auto dfs = [&](auto dfs, int d, int p) -> void { for (auto x : gr[d]) { if (x == p) continue; dfs(dfs, x, d); } if (p == -1) return; int delta = b[d] - a[d]; if (delta < 0) delta += mod; a[d] = (a[d] + delta) % mod; a[p] = (a[p] + delta) % mod; }; dfs(dfs, 0, -1); bool ok = a == b; // cout << a << b; cout << (ok ? "Yes\n" : "No\n"); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while (t--) solve(); }