#include <stdio.h>
#include <string.h>
#define MAXN 15000
#define MAXM 30000
#define MAXLG 13
int x[MAXM], y[MAXM], z[MAXM], pnt[MAXM];
char bun[MAXN];
int ut[MAXN], nd[2 * MAXN], ct[2 * MAXN], nxt[2 * MAXN], dr;
int anc[MAXLG + 1][MAXN], cost[MAXLG + 1][MAXN], ad[MAXN];
int tata[MAXN];
inline int max2(int a, int b){
return a > b ? a : b;
}
int stata(int x){
if(tata[x] == -1)
return x;
int r = stata(tata[x]);
tata[x] = r;
return r;
}
inline char unesc(int a, int b){
if(stata(a) != stata(b)){
tata[stata(a)] = stata(b);
return 1;
}
return 0;
}
inline void add(int x, int y, int z){
nd[dr] = y;
nxt[dr] = ut[x];
ct[dr] = z;
ut[x] = dr;
dr++;
}
void qs(int st, int dr){
int i = st, j = dr, piv = z[pnt[(st + dr) / 2]], aux;
while(i <= j){
while(z[pnt[i]] < piv)
i++;
while(z[pnt[j]] > piv)
j--;
if(i <= j){
aux = pnt[i]; pnt[i] = pnt[j]; pnt[j] = aux;
i++; j--;
}
}
if(st < j)
qs(st, j);
if(i < dr)
qs(i, dr);
}
void gtata(int x, int tata, int adanc){
ad[x] = adanc;
int poz = ut[x];
while(poz != -1){
if(nd[poz] != tata){
anc[0][nd[poz]] = x;
cost[0][nd[poz]] = ct[poz];
gtata(nd[poz], x, adanc + 1);
}
poz = nxt[poz];
}
}
inline void precalc(int n){
int i, j;
for(i = 1; i <= MAXLG; i++){
for(j = 0; j < n; j++){
if(anc[i - 1][j] == -1){
anc[i][j] = -1;
cost[i][j] = cost[i - 1][j];
}
else{
anc[i][j] = anc[i - 1][anc[i - 1][j]];
cost[i][j] = max2(cost[i - 1][j], cost[i - 1][anc[i - 1][j]]);
}
}
}
}
inline int solve(int a, int b){
int aux, i, rez = 0;
if(ad[a] < ad[b]){
aux = a; a = b; b = aux;
}
for(i = MAXLG; i >= 0; i--){
if(ad[a] - (1 << i) >= ad[b]){
rez = max2(rez, cost[i][a]);
a = anc[i][a];
}
}
for(i = MAXLG; i >= 0; i--){
if(anc[i][a] != anc[i][b]){
rez = max2(rez, max2(cost[i][a], cost[i][b]));
a = anc[i][a];
b = anc[i][b];
}
}
if(a != b)
rez = max2(rez, max2(cost[0][a], cost[0][b]));
return rez;
}
int main(){
FILE *in = fopen("radiatie.in", "r");
int n, k, m, i;
fscanf(in, "%d%d%d", &n, &m, &k);
memset(tata, -1, sizeof tata);
for(i = 0; i < m; i++){
fscanf(in, "%d%d%d", &x[i], &y[i], &z[i]);
x[i]--; y[i]--;
pnt[i] = i;
}
qs(0, m - 1);
memset(ut, -1, sizeof ut);
for(i = 0; i < m; i++){
if(unesc(x[pnt[i]], y[pnt[i]])){
add(x[pnt[i]], y[pnt[i]], z[pnt[i]]);
add(y[pnt[i]], x[pnt[i]], z[pnt[i]]);
}
}
memset(anc[0], -1, sizeof anc[0]);
for(i = 0; i < n; i++){
if(anc[0][i] == -1)
gtata(i, -1, 0);
}
precalc(n);
FILE *out = fopen("radiatie.out", "w");
int a, b;
for(i = 0; i < k; i++){
fscanf(in, "%d%d", &a, &b);
a--; b--;
fprintf(out, "%d\n", solve(a, b));
}
fclose(in);
fclose(out);
return 0;
}