#include #include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) template void dedup(vector& a) { sort(a.begin(),a.end()); a.erase(unique(a.begin(),a.end()),a.end()); } 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> ES; rep(i, M) { int a, b, c; cin >> a >> b >> c; a--, b--; ES.push_back({c,a,b}); } vector V(Q), U(Q); rep(i, Q) { cin >> V[i] >> U[i]; V[i]--; } vectorANS(Q,-1); sort(ES.begin(),ES.end()); atcoder::dsu uf(N); vector> S(N); rep(i, N) S[i].push_back(A[i]); rep(i,Q)if(U[i]==1)ANS[i]=0; auto Merge = [&](int w, int a, int b) { if (uf.same(a, b)) return; a = uf.leader(a), b = uf.leader(b); int n = uf.merge(a,b); int o = n ^ a ^ b; if (S[n].size() < S[o].size()) swap(S[n], S[o]); rep(i, S[o].size()) S[n].push_back(S[o][i]); dedup(S[n]); }; for(auto[c,a,b]:ES) { Merge(c,a,b); rep(i,Q) { if(ANS[i]==-1) { int a = uf.leader(V[i]); if (S[a].size()>=U[i]) ANS[i]=c; } } } rep(i,Q)cout<