#include <stdio.h>
#include <stdlib.h>
#define MAX_N (1 << 15)
#define MAX_K (1 << 14)
#define INF (1 << 30)
#define max(a,b) ((a) > (b) ? (a) : (b))
#define swap(a,b) ((a)^=(b), (b)^=(a), (a)^=(b))
int N, M, K, Min[MAX_N], *G[MAX_N], *C[MAX_N];
int *V[MAX_N], *Ind[MAX_N];
int res[MAX_K];
int Q[1<<20];
void baga(int xs)
{
int x, inc, sf, *p, *c, i;
Q[inc = sf = 0] = xs;
for(i = 1; i <= N; i++)
Min[i] = INF;
Min[xs] = 0;
while(inc <= sf)
{
x = Q[inc++];
for(p = G[x], c = C[x]; *p; p++, c++)
if(max(Min[x], *c) < Min[*p])
Min[*p] = max(Min[x], *c), Q[++sf] = *p;
}
for(p = V[xs], c = Ind[xs]; *p; p++, c++)
res[*c] = Min[*p];
}
void solve(void)
{
int i;
for(i = 1; i <= N; i++)
if(V[i][0] != 0)
baga(i);
}
int deg[MAX_N], edge[1<<16][3];
void read_data(void)
{
int i, j, u, v, c;
scanf("%d %d %d\n", &N, &M, &K);
for(i = 1; i <= M; i++)
scanf("%d %d %d\n", &u, &v, &c),
deg[u]++, deg[v]++, edge[i][0] = u, edge[i][1] = v, edge[i][2] = c;
for(i = 1; i <= N; i++)
G[i] = (int*) malloc(sizeof(int)*(deg[i]+2)), G[i][deg[i]] = 0,
C[i] = (int*) malloc(sizeof(int)*(deg[i]+2)),
deg[i] = 0;
for(i = 1; i <= M; i++)
{
u = edge[i][0], v = edge[i][1], c = edge[i][2];
G[u][deg[u]] = v, G[v][deg[v]] = u;
C[u][deg[u]++] = c, C[v][deg[v]++] = c;
}
for(i = 1; i <= N; i++)
deg[i] = 0;
for(i = 1; i <= K; i++)
{
scanf("%d %d\n", &u, &v);
if(u > v) swap(u, v);
deg[u]++, edge[i][0] = u, edge[i][1] = v;
}
for(i = 1; i <= N; i++)
V[i] = (int*) malloc(sizeof(int)*(deg[i]+2)), V[i][deg[i]] = 0,
Ind[i] = (int*) malloc(sizeof(int)*(deg[i]+2)),
deg[i] = 0;
for(i = 1; i <= K; i++)
{
u = edge[i][0], v = edge[i][1];
V[u][deg[u]] = v, Ind[u][deg[u]++] = i;
}
}
void write_data(void)
{
int i;
for(i = 1; i <= K; i++)
printf("%d\n", res[i]);
}
int main(void)
{
freopen("radiatie.in", "rt", stdin);
freopen("radiatie.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}