#include <bits/stdc++.h>
#define maxN 15002
#define maxP 14
using namespace std;
int r, n, m, k, lev[maxN], t[maxN];
int xlca, ylca;
struct asdf
{
int anc, val;
}v[maxN][maxP + 2];
struct edge
{
int x;
int y;
int z;
};
vector < edge > V;
vector < 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);
t[rx] = ry;
}
void read()
{
int i;
edge el;
freopen("radiatie.in", "r", stdin);
scanf("%d %d %d", &n, &m, &k);
for (i = 1; i <= m; ++ i)
{
scanf("%d %d %d", &el.x, &el.y, &el.z);
V.push_back(el);
}
}
void APM()
{
int rx, ry;
sort(V.begin(), V.end(), cmp);
while (m --)
{
edge el = V.back();
rx = root(el.x);
ry = root(el.y);
if (rx != ry)
{
Union(el.x, el.y);
if (v[el.x][0].anc)
swap(el.x, el.y);
v[el.x][0].anc = el.y;
v[el.x][0].val = el.z;
E[el.y].push_back(el.x);
}
V.pop_back();
}
}
void DFS(int x)
{
int i;
for (i = 0; i < E[x].size(); ++ i)
{
lev[E[x][i]] = lev[x] + 1;
DFS(E[x][i]);
}
}
void ANC()
{
int i, j;
for (i = 1; i <= n; ++ i)
if (!v[i][0].anc)
{
r = i;
break;
}
DFS(r);
for (i = 1; i <= n; ++ i)
for (j = 1; (1 << j) <= n; ++ j)
{
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 &z)
{
int i;
for (i = 0; 1 << i <= x; ++ i)
if (x & (1 << i))
{
z = max(z, 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;
for (i = maxP; i >= 0; -- i)
{
int fx = v[x][i].anc,
fy = v[y][i].anc;
if (fx != fy)
{
xlca = max(xlca, v[x][i].val);
ylca = max(ylca, v[y][i].val);
x = fx;
y = fy;
k += (1 << i);
}
}
for (i = 0; i <= maxP; ++ i)
{
int fx = v[x][i].anc,
fy = v[y][i].anc;
if (fx == fy)
{
xlca = max(xlca, v[x][i].val);
ylca = max(ylca, v[y][i].val);
k += (1 << i);
break;
}
}
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], ylca);
return bs(x, y);
}
void solve()
{
APM();
ANC();
}
void write()
{
int x, y, ans;
freopen("radiatie.out", "w", stdout);
while (k --)
{
scanf("%d %d", &x, &y);
xlca = 0;
ylca = 0;
int lca = LCA(x, y);
ans = max(xlca, ylca);
printf("%d\n", ans);
}
}
int main()
{
read();
solve();
write();
return 0;
}