/* -*- coding: utf-8 -*- * * 3093.cc: No.3093 Safe Infection - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_M = 100000; /* typedef */ using pii = pair; using spii = set; /* global variables */ int as[MAX_N]; pii ais[MAX_N]; spii ses[MAX_M]; /* subroutines */ /* main */ int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); for (int i = 0; i < n; i++) scanf("%d", as + i); for (int i = 0; i < m; i++) { int u, v; scanf("%d%d", &u, &v); u--, v--; if (as[u] < as[v] || (as[u] == as[v] && u < v)) ses[u].insert({as[v], v}); else ses[v].insert({as[u], u}); } for (int i = 0; i < n; i++) ais[i] = {as[i], i}; sort(ais, ais + n); for (int i = 0; i < n - 1; i++) { auto [au, u] = ais[i]; auto &seu = ses[u]; if (seu.empty()) { puts("No"); return 0; } auto [av, v] = *seu.begin(); seu.erase(seu.begin()); if (av - au > k) { puts("No"); return 0; } auto &sev = ses[v]; if (seu.size() > sev.size()) swap(seu, sev); for (auto &e: seu) sev.insert(e); seu.clear(); } puts("Yes"); return 0; }