#include <stdio.h>
#include <vector>
#include <algorithm>
#define NMAX 15050
#define INF 666000666
using namespace std;
int N, M, K, X, Y, Rep[NMAX], H[NMAX], Marc[NMAX], T[NMAX], Tc[NMAX], F[NMAX];
vector<pair<int, int> > Muc, Cost;
vector<int> A[NMAX], C[NMAX];
int rep(int x)
{
int nod = x;
while (Rep[nod] != nod) nod = Rep[nod];
return nod;
}
void uneste(int x, int y, int cost)
{
int rx = rep(x), ry = rep(y);
if (H[ry] > H[rx]) Rep[ry] = rx;
else
{
Rep[ry] = rx;
H[ry] += (H[rx]==H[ry]);
}
A[x].push_back(y); C[x].push_back(cost);
A[y].push_back(x); C[y].push_back(cost);
}
int max(int a, int b)
{
return ((a)>(b)?(a):(b));
}
void dfs(int nod)
{
int i, n = A[nod].size();
for (i = 0; i < n; i++)
if (!F[ A[nod][i] ])
{
T[ A[nod][i] ] = nod; Tc[ A[nod][i] ] = C[nod][i];
F[ A[nod][i] ] = 1;
dfs(A[nod][i]);
}
}
int main()
{
int i, j, k, m, cmax;
freopen("radiatie.in", "r", stdin);
scanf("%d %d %d", &N, &M, &K);
for (m = 0; m < M; m++)
{
scanf("%d %d %d", &i, &j, &k);
Muc.push_back(make_pair(i, j));
Cost.push_back(make_pair(k, m));
}
sort(Cost.begin(), Cost.end());
for (i = 1; i <= N; i++) Rep[i] = i, H[i] = 1;
for (k = 0; k < M; k++)
{
i = Muc[ Cost[k].second ].first; j = Muc[ Cost[k].second ].second;
if (rep(i) != rep(j))
uneste(i, j, Cost[k].first);
}
for (i = 1; i <= N; i++)
if (Rep[i] == i) { F[i] = 1; dfs(i); break; }
freopen("radiatie.out", "w", stdout);
while (K--)
{
scanf("%d %d", &X, &Y);
k = X;
Marc[0] = K;
while (T[k] != 0) Marc[k] = K, k = T[k];
Marc[Rep[k]] = K;
m = 1;
k = Y;
cmax = -INF;
do{
if (Marc[k] != K) { cmax = max(Tc[k], cmax); k = T[k]; }
else m = 0;
}while (m);
m = k;
k = X;
while (k != m && T[k] != 0)
{
if (T[k] != 0) cmax = max(Tc[k], cmax);
k = T[k];
}
printf("%d\n", cmax);
}
return 0;
}