#include using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; long long K; if(!(cin >> N >> M >> K)) return 0; vector> g(N+1); for(int i=0;i> u >> v; g[u].push_back(v); g[v].push_back(u); } vector B(N+1); for(int i=1;i<=N;i++) cin >> B[i]; vector color(N+1, -1); vector vis(N+1, 0); const long long Kll = K; for(int s=1;s<=N;s++){ if(vis[s]) continue; // BFS queue q; q.push(s); vis[s] = 1; color[s] = 0; bool is_bip = true; ll sum0 = 0, sum1 = 0; ll sumAll = 0; vector comp; while(!q.empty()){ int v = q.front(); q.pop(); comp.push_back(v); if(color[v]==0) sum0 = (sum0 + B[v]) ; else sum1 = (sum1 + B[v]) ; sumAll = (sumAll + B[v]); for(int to: g[v]){ if(!vis[to]){ vis[to] = 1; color[to] = color[v]^1; q.push(to); }else{ if(color[to] == color[v]) is_bip = false; } } } // apply conditions if(is_bip){ // need sum0 % K == sum1 % K long long a = sum0 % Kll; long long b = sum1 % Kll; if( ( (a - b) % Kll + Kll) % Kll != 0 ){ cout << "No\n"; return 0; } }else{ // non-bipartite: need sumAll % gcd(2,K) == 0 if(Kll % 2 == 0){ // check parity of sumAll if( (sumAll % 2 + 2) % 2 != 0 ){ cout << "No\n"; return 0; } }else{ // K odd -> always OK } } } cout << "Yes\n"; return 0; }