#include<stdio.h>
#define NM 15001
#define MM 30001
#define Max(a, b) ((a) > (b) ? (a) : (b))
int n,m,T,i,j,k;
int h[NM],t[NM],rus[NM],c[NM];
int a,b,maxi;
struct rad {
int x,y,c;
} e[MM],aux;
void Qsort(int st,int dr){
int i=st-1;
int j=dr+1;
do{
do{
++i;
}while(e[i].c<e[st].c);
do{
--j;
}while(e[st].c<e[j].c);
if(i<=j)
aux=e[i],e[i]=e[j],e[j]=aux;
}while(i<=j);
if(i<dr)
Qsort(i,dr);
if(st<j)
Qsort(st,j);
}
int search(int nod){
if ( t[nod] != nod )
return search(t[nod]);
return t[nod];
}
void cerno(int i,int j){
if(h[i]>h[j])
t[j]=i,c[j]=e[k].c;
else{
t[i]=j,c[i]=e[k].c;
if(h[i]==h[j])
h[j]++;
}
}
int fl(int nod){
if(rus[nod]!=0)
return rus[nod];
if(t[nod]==nod)
return 1;
return (rus[nod]=fl(t[nod])+1);
}
void solve(){
Qsort(1,m);
for(i=1;i<=n;++i)
t[i]=i,h[i]=1,c[i]=0;
int nrm=n;
for(k=1;k<=m;++k){
if(nrm==1)
break;
int r1=search(e[k].x);
int r2=search(e[k].y);
if(r1!=r2){
cerno(r1,r2);
nrm--;
}
}
for ( i = 1; i <= n; i++ )
fl(i);
}
int main(){
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
scanf("%d %d %d", &n, &m, &T);
for(i=1;i<=m;++i)
scanf("%d %d %d", &e[i].x, &e[i].y, &e[i].c);
solve();
for(int g=1;g<=T;++g){
scanf("%d %d", &a, &b);
maxi=0;
while(rus[a]>rus[b])
maxi = Max(maxi, c[a]), a = t[a];
while(rus[b]>rus[a])
maxi = Max(maxi, c[b]), b = t[b];
while(a!=b)
maxi = Max(maxi, Max(c[a], c[b])), a = t[a], b = t[b];
printf("%d\n",maxi);
}
fclose(stdin);
fclose(stdout);
return 0;
}