#include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M, Q; cin >> N >> M >> Q; vector A(N); rep(i, N) cin >> A[i]; vector>>G(N); rep(i, M) { int a, b, c; cin >> a >> b >> c; a--, b--; G[a].push_back({b,c}); G[b].push_back({a,c}); } if (N <= 1000 && M <= 1000 && Q <= 5000) { rep(qi, Q) { int s, c; cin >> s >> c; s--; auto check = [&](int w) { queueque; que.push(s); vector vis(N); vis[s] = 1; while(que.size()) { int v = que.front();que.pop(); for(auto[u,ww]:G[v]) if(w>=ww && !vis[u]) vis[u]=1,que.push(u); } setks; rep(i,N)if(vis[i]) ks.insert(A[i]); return ks.size()>=c; }; ll ng = 0, ok = 2e9; while(ok-ng>1) { ll m = (ok + ng) / 2; (check(m) ? ok : ng) = m; } cout << ok << "\n"; } return 0; } assert(0); }