#include <bits/stdc++.h>
#define maxN 15002
#define maxP 14
#define f first
#define s second
#define mp make_pair
using namespace std;
int r, n, m, k, lev[maxN], t[maxN * 2];
int xylca;
struct asdf
{
int anc, val;
} v[maxN][maxP + 2];
struct edge
{
int x;
int y;
int z;
}V[maxN];
vector < pair < int, int > > E[maxN];
int cmp(const edge a, const edge b)
{
return a.z < b.z;
}
int root(int x)
{
if (t[x] == 0)
return x;
t[x] = root(t[x]);
return t[x];
}
void Union(int x, int y)
{
int rx = root(x), ry = root(y);
if (rx != ry)
t[rx] = ry;
}
void read()
{
int i;
freopen("radiatie.in", "r", stdin);
scanf("%d %d %d", &n, &m, &k);
for (i = 1; i <= m; ++ i)
scanf("%d %d %d", &V[i].x, &V[i].y, &V[i].z);
}
void APM()
{
int rx, ry, i;
sort(V + 1, V + m + 1, cmp);
for(i = 1; i <= m; i ++)
{
rx = root(V[i].x);
ry = root(V[i].y);
if(rx != ry){
Union(rx, ry);
if (v[V[i].x][0].anc)
swap(V[i].x, V[i].y);
E[V[i].x].push_back(mp(V[i].y, V[i].z));
E[V[i].y].push_back(mp(V[i].x, V[i].z));
}
}
}
void DFS(int x)
{
int i;
for (i = 0; i < E[x].size(); ++ i)
if (!lev[E[x][i].f] && E[x][i].f != r)
{
lev[E[x][i].f] = lev[x] + 1;
v[E[x][i].f][0].anc = x;
v[E[x][i].f][0].val = E[x][i].s;
DFS(E[x][i].f);
}
}
void ANC()
{
int i, j;
for (i = 1; i <= n; ++ i)
if (!v[i][0].anc)
{
r = i;
break;
}
DFS(r);
for (j = 1; (1 << j) <= n; ++ j)
for (i = 1; i <= n; ++ i)
{
v[i][j].anc = v[v[i][j - 1].anc][j - 1].anc;
v[i][j].val = max(v[i][j - 1].val, v[v[i][j - 1].anc][j - 1].val);
}
}
int X_anc(int q, int x)
{
int i;
for (i = 0; (1 << i) <= x; ++ i)
if (x & (1 << i))
{
xylca = max(xylca, v[q][i].val);
q = v[q][i].anc;
if (q == 0)
break;
}
return q;
}
int bs(int x, int y)
{
int i, k = 0;
if (x == y)
return x;
for (i = maxP; i >= 0; -- i)
if ((1 << i) <= lev[x])
{
int fx = v[x][i].anc,
fy = v[y][i].anc;
if (fx != fy)
{
xylca = max(xylca, v[x][i].val);
xylca = max(xylca, v[y][i].val);
x = fx;
y = fy;
k += (1 << i);
}
}
if(x != y)
{
xylca = max(xylca, v[x][0].val);
xylca = max(xylca, v[y][0].val);
++ k;
}
return k;
}
int LCA(int x, int y)
{
if (lev[x] > lev[y])
swap(x, y);
if (lev[y] > lev[x])
y = X_anc(y, lev[y] - lev[x]);
return bs(x, y);
}
void solve()
{
APM();
ANC();
}
void write()
{
int x, y, i;
freopen("radiatie.out", "w", stdout);
while (k --)
{
scanf("%d %d", &x, &y);
xylca = 0;
int lca = LCA(x, y);
if (x == y)
xylca = 0;
printf("%d\n", xylca);
}
}
int main()
{
read();
solve();
write();
return 0;
}