#include using namespace std; int main(void){ int n,m,q; cin>>n>>m>>q; vector>>parent(n),ans(n); vector>d(n); vector>s(n); for(int i=0;i>a; parent[i].push_back({0,i}); ans[i].push_back({0,1}); d[i].push_back(i); s[i].insert(a); } vector>edge(m); for(int i=0;i>edge[i][1]>>edge[i][2]>>edge[i][0]; edge[i][1]--,edge[i][2]--; } sort(edge.begin(),edge.end()); vectorxs; xs.push_back(0); for(auto &x:edge){ int p1=parent[x[1]][(int)parent[x[1]].size()-1][1],p2=parent[x[2]][(int)parent[x[2]].size()-1][1]; if(p1==p2)continue; xs.push_back(x[0]); if(d[p1].size()>d[p2].size())swap(p1,p2); for(auto &y:d[p1]){ d[p2].push_back(y); parent[y].push_back({x[0],p2}); } for(auto &y:s[p1]){ s[p2].insert(y); } ans[p2].push_back({x[0],(int)s[p2].size()}); } while(q--){ int now,c; cin>>now>>c; now--; int mn=0,mx=xs.size(); while(mx-mn){ int mid=(mx+mn)/2; int val=xs[mid]; auto iter=lower_bound(parent[now].begin(), parent[now].end(),(array){val+1,-1}); int pos = iter-parent[now].begin()-1; int par=parent[now][pos][1]; iter=lower_bound(ans[par].begin(), ans[par].end(),(array){val+1,-1}); pos=iter-ans[par].begin()-1; if(ans[par][pos][1]>=c){ mx=mid; }else{ mn=mid+1; } } cout<<(mx==xs.size()?-1:xs[mx])<