#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iostream>
#define NMAX 15100
#define MMAX 30100
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n,nr,m,cx,cy;
int k;
int calclevel(int x);
inline int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
inline void swape(int& a,int& b)
{
int aux=a;
a=b;
b=aux;
}
int h[MMAX];
struct ele{int y,cost;};
vector<ele> g[NMAX];
int p[NMAX][30];
int coin[NMAX][30];
int level[NMAX];
void dfs(int start,int nivel);
ele tati[NMAX];
bool da[NMAX];
int Find(int x);
void Union (int x,int y,int cos);
int caut(int x,int y);
struct muchie{
int x,y,cost;
friend bool operator < (muchie a,muchie b);
friend bool operator <= (muchie a,muchie b);
friend bool operator >= (muchie a,muchie b);
friend bool operator > (muchie a,muchie b);
};
muchie H[MMAX],a[NMAX];
bool operator < (muchie a,muchie b)
{
return a.cost<b.cost;
}
bool operator <= (muchie a,muchie b)
{
return a.cost<=b.cost;
}
bool operator >= (muchie a,muchie b)
{
return a.cost>=b.cost;
}
bool operator > (muchie a,muchie b)
{
return a.cost>b.cost;
}
int nrsel,costtotal;muchie mmin;
void creare();
void combinare(int n,muchie H[],int poz); ///poz=pozitia radacinii
muchie extragemin(int &n , muchie H[]);
void heapsort();
int main()
{//citire(n,H);
int i,j;
int x,y,m1,m2,lca,lo;
creare();
int nrm=1;
while(nrsel<n-1)
{
mmin=H[nrm];
cx=Find(mmin.x);
cy=Find(mmin.y);
if(cx!=cy)
{
nrsel++;
Union(cx,cy,mmin.cost);
}
nrm++;
}
for(i=1;i<=n;i++)
level[i]=-1;
/*for(j=0;j<=log2(n);j++)
for(i=1;i<=n;i++)
if(!j)
p[i][j]=tati[i].y,coin[i][j]=tati[i].cost;
else
p[i][j]=p[p[i][j-1]][j-1],coin[i][j]=maxim(coin[i][j-1],coin[p[i][j-1]][j-1]);*/
for(i=1;i<=k;i++)
{
fin>>x>>y;
fout<<caut(x,y)<<'\n';
}
}
void creare()
{int i;
fin>>n>>m>>k;
for(i=1;i<=m;i++) fin>>H[i].x>>H[i].y>>H[i].cost;
sort(H+1,H+m+1);
}
int Find(int x)
{
int rad=x;int aux;
while(tati[rad].y)
rad=tati[rad].y;
return rad;
}
void Union(int x,int y,int cos)
{ if(h[x]<h[y])
{tati[x].y=y;tati[x].cost=cos;}
else
{tati[y].y=x;tati[y].cost=cos;if(h[x]==h[y])h[x]++;}
}
int caut(int x,int y)
{ int sol=0,nv1,nv2;
nv1=calclevel(x);
nv2=calclevel(y);
while(nv1>nv2)
{
sol=maxim(sol,tati[x].cost);
x=tati[x].y;nv1--;
}
while(nv2>nv1)
{
sol=maxim(sol,tati[y].cost);
y=tati[y].y;nv2--;
}
while(x!=y)
{
sol=maxim(sol,tati[x].cost);
sol=maxim(sol,tati[y].cost);
x=tati[x].y;
y=tati[y].y;
}
return sol;
}
int calclevel(int x)
{ int nr=0;
while(tati[x].y){ nr++;x=tati[x].y;}
return nr;
}