#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
struct Muchie
{
int u,v,c;
};
Muchie v[30005];
struct Solutie
{
int x,y,c;
} sol[30005];
int t[15005];
int h[15005];
bool viz[15005];
int niv[15005];
struct Muchii
{
int y,z;
};
vector<Muchii> g[15005];
struct Stramosi
{
int nod,maxx;
} stramos[15005][20];
int FindSet(int x)
{
while(x!=t[x])
x=t[x];
return x;
}
bool UnionSet(int x, int y)
{
int tx,ty;
tx=FindSet(x);
ty=FindSet(y);
if(tx==ty)
return 0;
else{
if(h[tx]==h[ty]){
h[tx]++;
t[ty]=tx;
}
else{
if(h[tx]<h[ty])
t[tx]=ty;
else
t[ty]=tx;
}
return 1;
}
}
bool cmp(Muchie a, Muchie b)
{
return a.c<b.c;
}
void dfs(int nod, int tata, int cost)
{
stramos[nod][0].nod=tata;
stramos[nod][0].maxx=cost;
niv[nod]=niv[tata]+1;
for(int i=1; i<=15; i++){
stramos[nod][i].nod=stramos[stramos[nod][i-1].nod][i-1].nod;
stramos[nod][i].maxx=max(stramos[nod][i-1].maxx, stramos[stramos[nod][i-1].nod][i-1].maxx);
}
viz[nod]=1;
for(int i=0; i<g[nod].size(); i++)
if(viz[g[nod][i].y]==0)
dfs(g[nod][i].y, nod, g[nod][i].z);
}
int lca(int x, int y)
{
if(niv[x]<niv[y])
swap(x, y);
for(int i=15; i>=0; i--)
if(niv[x]-(1<<i)>=niv[y])
x=stramos[x][i].nod;
if(x==y)
return x;
for(int i=15; i>=0; i--)
if(stramos[x][i].nod && stramos[x][i].nod!=stramos[y][i].nod){
x=stramos[x][i].nod;
y=stramos[y][i].nod;
}
return stramos[x][0].nod;
}
int main()
{ freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
int n,m,k,i,kk,j,x,y,r,maxx;
scanf("%d%d%d", &n, &m, &k);
for(i=1; i<=m; i++)
scanf("%d%d%d", &v[i].u, &v[i].v, &v[i].c);
for(i=1; i<=n; i++){
t[i]=i;
h[i]=1;
}
sort(v+1, v+m+1, cmp);
kk=0;
for(i=1; i<=m; i++)
if(UnionSet(v[i].u, v[i].v)==1){
sol[++kk].x=v[i].u;
sol[kk].y=v[i].v;
sol[kk].c=v[i].c;
}
for(i=1; i<=kk; i++){
g[sol[i].x].push_back({sol[i].y, sol[i].c});
g[sol[i].y].push_back({sol[i].x, sol[i].c});
}
dfs(1, 0, 0);
for(j=1; j<=k; j++){
scanf("%d%d", &x, &y);
r=lca(x, y);
maxx=0;
for(i=15; i>=0; i--)
if(niv[x]-(1<<i)>=niv[r]){
maxx=max(maxx, stramos[x][i].maxx);
x=stramos[x][i].nod;
}
for(i=15; i>=0; i--)
if(niv[y]-(1<<i)>=niv[r]){
maxx=max(maxx, stramos[y][i].maxx);
y=stramos[y][i].nod;
}
printf("%d\n", maxx);
}
return 0;
}