#include <stdio.h>
#include <string.h>
#define nmax 15010
#define kmax 15010
int n,c[nmax],k,m,i,j,f,l,mid,aa,bb,cc,nc,ka[kmax],kb[kmax],kk;
struct nod
{
int x,d;
nod *n;
};
nod *adj[nmax],*aux;
void fill(int x,int xxx)
{
nod *aux;
for (aux=adj[x];aux!=NULL;aux=aux->n)
if ((!c[aux->x])&&(aux->d<=xxx))
c[aux->x]=nc,fill(aux->x,xxx);
}
int solve(int xxx)
{
memset(c,0,sizeof(c)),nc=0;
for (i=1;i<=n;i++)
if (!c[i])
c[i]=++nc,fill(i,xxx);
if (c[ka[kk]]!=c[kb[kk]])
return 0;
return 1;
}
int main()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for (i=0;i<m;i++)
{
scanf("%d%d%d",&aa,&bb,&cc);
aux=new nod;
aux->x=bb,aux->d=cc,aux->n=adj[aa],adj[aa]=aux;
aux=new nod;
aux->x=aa,aux->d=cc,aux->n=adj[bb],adj[bb]=aux;
}
for (i=0;i<k;i++)
scanf("%d%d",ka+i,kb+i);
for (kk=0;kk<k;kk++)
{
f=1,l=1000000000;
while (l-f>1)
{
mid=(f+l)/2;
if (solve(mid))
l=mid;
else
f=mid+1;
}
if (solve(f))
printf("%d\n",f);
else
printf("%d\n",l);
}
return 0;
}