#include <cstdio>
#include<algorithm>
#define MAXN 15000
#define MAXM 30000
#define LOG 15
using namespace std;
struct muchie{
int val, cost;
}v[MAXN+1];
struct muchie1{
int x, y, cost;
}grf[MAXM+1];
int r, lista[MAXN+1], nxt[MAXN+1], gr[MAXN+1], h[MAXN+1], str[LOG][MAXN+1], maxi[LOG][MAXN+1], t[MAXN+1];
inline void swap1(int &a, int &b)
{
int aux=a;
a=b;
b=aux;
}
inline void adauga(int x, int y, int z)
{
v[++r].val=y;
v[r].cost=z;
nxt[r]=lista[x];
lista[x]=r;
}
inline int maxim(int a, int b)
{
if(a>b)
return a;
return b;
}
bool cresc(const muchie1 &a, const muchie1 &b)
{
return (a.cost<b.cost);
}
int father(int x)
{
if(x==t[x])
return x;
return t[x]=father(t[x]);
}
inline void join(int x, int y)
{
int rx=father(x), ry=father(y);
t[rx]=ry;
}
void dfs(int nod, int lev)
{
int p, vecin;
h[nod]=lev;
p=lista[nod];
while(p)
{
vecin=v[p].val;
str[0][v[p].val]=nod;
maxi[0][v[p].val]=v[p].cost;
dfs(v[p].val, lev+1);
p=nxt[p];
}
}
void calculate(int n)
{
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i<=n;++i){
str[j][i]=str[j-1][str[j-1][i]];
maxi[j][i]=maxim(maxi[j-1][i], maxi[j-1][str[j-1][i]]);
}
}
inline int query(int x, int y)
{
int mx=-1;
if(h[x]<h[y])
swap1(x, y);
int log1, log2;
for(log1 = 1; (1 << log1) < h[x]; ++log1);
for(log2 = 1; (1 << log2) < h[y]; ++log2);
for(int k = log1; k >= 0; --k)
if(h[x] - (1 << k) >= h[y]){
mx=maxim(mx, maxi[k][x]);
x = str[k][x];
}
if(x == y) return mx;
for(int k = log2; k >= 0; --k)
if(str[k][x] && str[k][x] != str[k][y]){
mx=maxim(mx, maxi[k][x]);
mx=maxim(mx, maxi[k][y]);
x = str[k][x];
y = str[k][y];
}
mx=maxim(mx, maxi[0][x]);
mx=maxim(mx, maxi[0][y]);
return mx;
}
int main()
{
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
int n, m, k, n1, n2;
scanf("%d%d%d", &n, &m, &k);
for(int i=1;i<=m;++i)
scanf("%d%d%d", &grf[i].x, &grf[i].y, &grf[i].cost);
sort(grf+1, grf+m+1, cresc);
for(int i=1;i<=n;++i)
t[i]=i;
for(int i=1;i<=m && r<n-1; ++i)
{
if(t[father(grf[i].x)]!=t[father(grf[i].y)])
{
join(grf[i].x, grf[i].y);
adauga(grf[i].x, grf[i].y, grf[i].cost);
}
}
dfs(1, 0);
calculate(n);
for(int i=1;i<=k;++i)
{
scanf("%d%d", &n1, &n2);
printf("%d\n", query(n1, n2));
}
return 0;
}