#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]; } bool ans = 1; queue bfs; vector come(n,0); vector num(n,0); for(ll i = 0; i < n; i++){ num[i] = pass[i].size(); if(num[i] == 1){ bfs.push(i); } } while(!bfs.empty()){ ll x = bfs.front(); bfs.pop(); if(come[x])continue; come[x] = 1; //if(num[x] > 1)break; for(ll i : pass[x]){ if(come[i])continue; num[i]--; num[x]--; b[i] += k; b[i] -= b[x]; b[i] %= k; b[x] = 0; if(num[i] == 1)bfs.push({i}); } } for(ll i = 0; i < n; i++){ if(b[i] != 0){ ans = 0; break; } } if(ans)cout << "Yes" << '\n'; else cout << "No" << '\n'; } return 0; }