#include #include #include using namespace std; using ll = long long; #define overload4(a, b, c, d, name, ...) name #define rep1(n) for (ll i = 0; i < n; ++i) #define rep2(i, n) for (ll i = 0; i < n; ++i) #define rep3(i, a, b) for (ll i = a; i < b; ++i) #define rep4(i, a, b, c) for (ll i = a; i < b; i += c) #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) void solve(); int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); ll t = 1; cin >> t; for (int i = 1; i <= t; i++) solve(); return 0; } ll dy[4] = {-1, 0, 1, 0}, dx[4] = {0, 1, 0, -1}; void solve() { ll n, m, k; cin >> n >> m >> k; vector> g(n); rep(i, m) { ll u, v; cin >> u >> v; u--, v--; g[u].push_back(v), g[v].push_back(u); } vector a(n), b(n); rep(i, n) cin >> b[i]; vector col(n, -1); bool is_bip = true; auto dfs = [&](auto&& self, ll from, ll par) -> void { for (auto to : g[from]) { if (to == par) continue; if (col[to] == col[from]) is_bip = false; if (col[to] != -1) continue; col[to] = 1 - col[from]; self(self, to, from); } }; dfs(dfs, 0, -1); if (is_bip) { ll c[2] = {0, 0}; rep(i, n) c[col[i]] += b[i], c[col[i]] %= k; cout << (c[0] == c[1] ? "Yes" : "No") << endl; } else { ll s = accumulate(b.begin(), b.end(), 0LL) % k; if (k % 2) cout << "Yes" << endl; else cout << (s % 2 ? "No" : "Yes") << endl; } }