#include using namespace std; #include using namespace atcoder; using ll = long long; using mint = modint1000000007; int main() { int N, M, K; cin >> N >> M >> K; vector A(N); vector> G(N); for(int i = 0; i < N; i++) { cin >> A[i]; } for(int i = 0; i < M; i++) { int u, v; cin >> u >> v; G[u - 1].push_back(v - 1); G[v - 1].push_back(u - 1); } vector P(N); iota(P.begin(), P.end(), 0); sort(P.begin(), P.end(), [&](int i, int j) { return A[i] < A[j]; }); dsu uf(N); for(int i : P) { for(int j : G[i]) { if(A[i] > A[j]) { if(A[uf.leader(i)] - A[uf.leader(j)] > K) { cout << "No" << endl; return 0; } uf.merge(i, j); A[uf.leader(i)] = A[i]; } } } cout << "Yes" << endl; }