#include <stdio.h>
#include <vector>
#include <algorithm>
#define nmax 15005
#define mmax 30005
#define pmax 15
using namespace std;
int n, m, k, a [mmax], b [mmax], c [mmax], ind [mmax], ne [nmax], t [nmax], cost [nmax], d [nmax];
vector <int> arb [nmax];
bool comp (int a, int b)
{
return c [a]<c [b];
}
int grup (int nod)
{
if (t [nod] == nod)
return nod;
return grup (t [nod]);
}
void dfs (int nod)
{
int i, s=arb [nod].size ();
for (i=0; i < s; ++i)
if (d [arb [nod] [i]] == 0)
{
d [arb [nod] [i]] = d [nod]+1;
dfs (arb [nod] [i]);
}
}
void apm ()
{
int i, x, y, aux;
for (i=1; i <= m; ++i)
{
x=grup (a [ind [i]]);
y=grup (b [ind [i]]);
if (x == y) continue;
if (ne [x] > ne [y])
aux=x, x=y, y=aux;
ne [y] += ne [x];
ne [x]=0;
t [x]=y;
cost [x]=c [ind [i]];
arb [y].push_back (x);
}
for (i=1; i <= n; ++i)
if (ne [i] != 0)
{
d [i]=1;
dfs (i);
}
}
inline int max (int x, int y)
{
return (x > y)? x:y;
}
int query (int x, int y)
{
int r=0, aux;
if (d [x] < d [y])
aux=x, x=y, y=aux;
for (; d [x] > d [y] ; r = max (r, cost [x]), x = t [x]);
for (; x != y; r = max (r, max (cost [x], cost [y])), x=t [x], y=t [y]);
return r;
}
int main ()
{
freopen ("radiatie.in", "r", stdin);
freopen ("radiatie.out", "w", stdout);
int i, x, y;
scanf ("%d%d%d", &n, &m, &k);
for (i=1; i <= m; ++i)
scanf ("%d%d%d", &a [i], &b [i], &c [i]);
for (i=1; i <= m; ++i)
ind [i]=i;
sort (ind+1, ind+1+i, comp);
for (i=1; i <= n; ++i)
{
t [i]=i;
ne [i]=1;
}
apm ();
for (i=1; i <= k; ++i)
{
scanf ("%d%d", &x, &y);
// printf ("%d\n", query (x, y));
}
return 0;
}