/* * 2026년도 한국정보올림피아드 2차 대회 * * 게임 (game) * 초등부 4번 / 중등부 3번 * Main Correct Solution (C++) */ #include #include #include using namespace std; long long maxk[200'010]; long long sum[200'010]; int vis[200'010]; int A[200'010]; vector> adj[200'010]; signed main() { ios::sync_with_stdio(false), cin.tie(nullptr); int N, M, Q; cin >> N >> M >> Q; for (int i = 1; i <= N; i++) cin >> A[i]; for (int i = 1; i <= M; i++) { int a, b, c; cin >> a >> b >> c; adj[a].emplace_back(b, c); adj[b].emplace_back(a, c); } long long cur = 1e18; priority_queue> pq; queue q; auto add = [&](int x) { for (auto& [v, c] : adj[x]) { if (vis[v]) continue; sum[v] += c; if (sum[v] >= cur) { maxk[v] = cur; vis[v] = 1; q.push(v); } else pq.emplace(sum[v], v); } }; for (int i = 1; i <= N; i++) { if (A[i] == 1) { maxk[i] = 1e18; vis[i] = 1; q.push(i); } } while (1) { while (q.size()) { int t = q.front(); q.pop(); add(t); } if (pq.empty()) break; int t = pq.top().second; pq.pop(); if (vis[t]) continue; maxk[t] = cur = sum[t]; vis[t] = 1; q.push(t); } for (int i = 1; i <= Q; i++) { int s; long long k; cin >> s >> k; if (maxk[s] >= k) cout << "YES\n"; else cout << "NO\n"; } return 0; }