#include //#include using namespace std; //using namespace atcoder; using ll = long long; using ld = long double; //using mint = modint998244353; int main(){ ll T; cin >> T; while(T--){ ll n,m,k; cin >> n >> m >> k; vector> pass(n,vector(0)); vector> way(0); //unordered_map cost; ll u,v; for(ll i = 0; i < m; i++){ cin >> u >> v; u--; v--; pass[u].push_back(v); pass[v].push_back(u); } vector b(n,0); for(ll i = 0; i < n; i++){ cin >> b[i]; } ll st; for(ll i = 0; i < n; i++){ if(pass[i].size() == 1){ st = i; break; } } bool ans = 1; queue bfs; bfs.push(st); vector come(n,0); come[st] = 1; while(!bfs.empty()){ ll x = bfs.front(); bfs.pop(); if(pass[x].size() == 1 && x != st){ if(b[x] != 0){ ans = 0; break; } } for(ll i : pass[x]){ if(come[i])continue; come[i] = 1; b[i] += k; b[i] -= b[x]; b[i] %= k; b[x] = 0; bfs.push(i); } } if(ans)cout << "Yes" << '\n'; else cout << "No" << '\n'; } return 0; }