#include <cstdio>
#include <algorithm>
#include <vector>
#define DMAX 30005
using namespace std;
FILE*fin=fopen("radiatie.in","r");
FILE*fout=fopen("radiatie.out","w");
struct muchie
{
int x,y,cost;
};
struct vecin
{
int varf,cost;
};
void citire();
bool sortare(muchie a,muchie b);
void kruskal();
void fagrafprim();
void DFS(int nod,int parinte,int nivel,int cost);
int querry(int x,int y);
void rezolvare();
vector<vecin> Gprim[DMAX];
muchie G[DMAX],GAPM[DMAX];
int conex[DMAX],level[DMAX],father[DMAX],costuri[DMAX];
int n,m,k;
int main()
{
citire();
sort(G+1,G+m+1, sortare);
kruskal();
fagrafprim();
DFS(1,0,1,0);
rezolvare();
return 0;
}
bool sortare(muchie a,muchie b)
{
return a.cost<b.cost;
}
void rezolvare()
{
int i,x,y;
for (i=1;i<=k;i++)
{
fscanf(fin,"%d %d",&x,&y);
fprintf(fout,"%d\n",querry(x,y));
}
}
void kruskal()
{
int i=0,nrp,minim,maxim,j,nrm=1;
for (i=1;i<=n;i++) conex[i]=i;
i=1;
for (nrp=1;nrp<=n-1;nrp++)
{for (;i<=m;i++)
if (conex[ G[i].x ]!=conex[ G[i].y ])
{
GAPM[nrm++]=G[i];
if ( conex[ G[i].x ]>conex[ G[i].y ] )
{
maxim=conex[ G[i].x ];
minim=conex[ G[i].y ];
}
else
{
maxim=conex[ G[i].y ];
minim=conex[ G[i].x ];
}
for (j=1;j<=n;j++)
if (conex[j]==maxim) conex[j]=minim;
}
}
}
void fagrafprim()
{
int i,nodparinte,nodfiu,cost;
vecin Vecin;
for (i=1;i<=n-1;i++)
{
nodparinte=GAPM[i].x;
nodfiu=GAPM[i].y;
cost=GAPM[i].cost;
Vecin.varf=nodfiu;
Vecin.cost=cost;
Gprim[nodparinte].push_back(Vecin);
Vecin.varf=nodparinte;
Vecin.cost=cost;
Gprim[nodfiu].push_back(Vecin);
}
}
void DFS(int nod,int parinte,int nivel,int cost)
{
int i;
father[nod]=parinte;
level[nod]=nivel;
costuri[nod]=cost;
for (i=0;i<Gprim[nod].size();i++)
if (level[Gprim[nod][i].varf]==0)
DFS(Gprim[nod][i].varf,nod,nivel+1,Gprim[nod][i].cost);
}
int querry(int x,int y)
{
int rezultat=0;
if (level[y]<level[x])
swap(x,y);
while (level[y]!=level[x])
{
rezultat=max(rezultat,costuri[y]);
y=father[y];
}
while (x!=y)
{
rezultat=max(rezultat,max(costuri[x],costuri[y]));
x=father[x];
y=father[y];
}
return rezultat;
}
void citire()
{
int i;
fscanf(fin,"%d %d %d",&n,&m,&k);
for (i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&G[i].x,&G[i].y,&G[i].cost);
}
}