//#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
vector<pair<int,int> > graf[15005];
vector<int> legit[15005];
int ap[15005],tata[15005],sz[15005];
pair<int,pair<int,int> > edge[15005];
int euclid[60005],niv[60005],contor,nex[20][60005],cs[20][60005],rmq[20][60005],put[20],lg[100000],fr[60005];
int daddy(int a){
if(tata[a]==a){
return a;
}
tata[a]=daddy(tata[a]);
return tata[a];
}
void unite(int a,int b,int c){
int aa=a,bb=b;
a=daddy(a);
b=daddy(b);
if(a==b)
return;
if(sz[a]<sz[b]){
swap(a,b);
}
tata[b]=a;
sz[a]+=sz[b];
//cout<<'|'<<aa<<" "<<bb<<"|\n";
graf[aa].push_back(make_pair(bb,c));
graf[bb].push_back(make_pair(aa,c));
}
void dfs(int v,int nv){
ap[v]=1;
euclid[++contor]=v;
niv[contor]=nv;
for(auto u:graf[v]){
if(ap[u.first]==1)
continue;
dfs(u.first,nv+1);
euclid[++contor]=v;
niv[contor]=nv;
legit[v].push_back(u.first);
nex[0][u.first]=v;
cs[0][u.first]=u.second;
}
}
int maxi(int a,int b){
if(a>b)
return a;
return b;
}
int ma(int a,int b){
if(niv[a]>niv[b]){
return b;
}
return a;
}
int solve_lant(int a,int b){
if(niv[fr[a]]<niv[fr[b]]){
swap(a,b);
}
int dist=niv[fr[a]]-niv[fr[b]],mx=0;
//cout<<"lant "<<a<<" "<<b<<" "<<dist<<" ";
while(dist!=0){
int e=lg[dist];
mx=maxi(mx,cs[e][a]);
a=nex[e][a];
dist-=put[e];
}
//cout<<mx<<"\n";
return mx;
}
int find_lca(int a,int b){
a=fr[a];
b=fr[b];
if(a>b)
swap(a,b);
int dist=b-a+1;
int e=lg[dist];
return ma(rmq[e][a],rmq[e][b-put[e]+1]);
}
int solve(int a,int b){
int lca=find_lca(a,b);
return maxi(solve_lant(a,lca),solve_lant(b,lca));
}
int main()
{
int n,m,k,a,b,c;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
sz[i]=1;
tata[i]=i;
}
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
edge[i].first=c;
edge[i].second.first=a;
edge[i].second.second=b;
}
sort(edge+1,edge+m+1);
for(int i=1;i<=m;i++){
unite(edge[i].second.first,edge[i].second.second,edge[i].first);
}
int root=1;
nex[0][root]=root;
dfs(root,1);
for(int i=contor;i>=1;i--){
fr[euclid[i]]=i;
rmq[0][i]=i;
}
put[0]=1;
for(int i=1;i<=13;i++){
for(int j=1;j<=n;j++){
nex[i][j]=nex[i-1][nex[i-1][j]];
cs[i][j]=maxi(cs[i-1][j],cs[i-1][nex[i-1][j]]);
}
put[i]=put[i-1]*2;
lg[put[i]]++;
}
for(int i=1;i<=95000;i++){
lg[i]+=lg[i-1];
}
//cout<<"\n";
for(int i=1;i<=13;i++){
for(int j=1;j<=contor;j++){
if(j+put[i]>contor)
break;
rmq[i][j]=ma(rmq[i-1][j],rmq[i-1][j+put[i-1]]);
}
}
/*cout<<"\n\n";
for(int i=0;i<=13;i++){
for(int j=1;j<=n;j++){
cout<<cs[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\n\n";
for(int i=1;i<=n;i++){
cout<<i<<"->";
for(auto u:legit[i]){
cout<<u<<" ";
}
cout<<"\n";
}
*/
for(int i=1;i<=k;i++){
cin>>a>>b;
cout<<solve(a,b)<<"\n";
}
return 0;
}