#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); vector>> T(N); rep(i, N) S[i].push_back(A[i]); rep(i,Q){ if(U[i]==1)ANS[i]=0; else { T[V[i]].push_back({U[i],i}); } } 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]); if (T[n].size() < T[o].size()) swap(T[n], T[o]); rep(i, T[o].size()) T[n].push_back(T[o][i]); dedup(S[n]); sort(T[n].rbegin(),T[n].rend()); int s = S[n].size(); while(T[n].size()&&T[n].back().first <= s) { ANS[T[n].back().second] = w; T[n].pop_back(); } }; for(auto[c,a,b]:ES) { Merge(c,a,b); } rep(i,Q)cout<