#include <fstream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
ifstream fin ("radiatie.in");
ofstream fout ("radiatie.out");
#define pb push_back
const int logN = 16;
const int N = 15005;
const int NN = 30020;
typedef pair <int, int> M;
typedef pair <int, M> CM;
list <pair <int, int> > g[N];
vector <CM> muchii;
int T[N], tata[N], F[N], E[NN], L[NN], bp[NN], v[N], rmq[logN][NN], dmin[logN][N], t[logN][N];
bool viz[N];
int n, m, q, last;
int cmp(int a, int b) {
return ((L[a] < L[b]) ? a : b);
}
void dfs(int x, int val) {
E[++last] = x; L[last] = val;
F[x] = last;
viz[x] = 1;
for (list <M> :: iterator it = g[x].begin(); it != g[x].end(); ++it)
if (!viz[(*it).first]) {
v[(*it).first] = (*it).second;
tata[(*it).first] = x;
dfs((*it).first, val + 1);
E[++last] = x; L[last] = val;
}
}
void RMQ() {
for (int i = 2; i <= last; ++i)
bp[i] = bp[i >> 1] + 1;
for (int i = 1; i <= last; ++i) {
if (i <= n) {
t[0][i] = tata[i];
dmin[0][i] = v[i];
}
rmq[0][i] = i;
}
for (int i = 1; i <= bp[last]; ++i)
for (int j = 1; j <= last - (1 << i) + 1; ++j)
rmq[i][j] = cmp(rmq[i-1][j], rmq[i-1][j + (1 << (i - 1))]);
for (int i = 1; i <= bp[n]; ++i)
for (int j = 1; j <= n; ++j)
if ((1 << i) <= L[F[j]]) {
t[i][j] = t[i-1][t[i-1][j]];
dmin[i][j] = max(dmin[i-1][j], dmin[i-1][t[i-1][j]]);
}
}
int LCA(int x, int y) {
int a = F[x], b = F[y];
if (a > b)
swap (a, b);
int pow = bp[b - a + 1];
return E[cmp(rmq[pow][a], rmq[pow][b + 1 - (1 << pow)])];
}
int query(int x, int y) {
int dif = L[F[x]] - L[F[y]], res = 0;
for (int i = 0; i <= bp[dif]; ++i)
if ((1 << i) & dif) {
res = max(dmin[i][x], res);
x = t[i][x];
}
return res;
}
int find(int x) {
if (T[x] != x)
T[x] = find(T[x]);
return T[x];
}
void unite(int x, int y) {
T[find (max(x, y))] = find (min (x, y));
}
int main() {
fin >> n >> m >> q;
for (int i = 1; i <= n; ++i)
T[i] = i;
while (m--) {
int x, y, c;
fin >> x >> y >> c;
muchii.pb(CM (c, M (x,y)));
}
sort (muchii.begin(), muchii.end());
int apm = 1;
for (vector <CM> :: iterator it = muchii.begin(); apm < n && it != muchii.end(); ++it)
if (find((*it).second.first) != find((*it).second.second)) {
unite ((*it).second.first, (*it).second.second);
apm++;
g[(*it).second.first].pb(M ((*it).second.second, (*it).first));
g[(*it).second.second].pb(M ((*it).second.first, (*it).first));
}
vector <CM>().swap(muchii);
dfs(1, 0);
RMQ();
while (q--) {
int x, y, z = 0, lca;
fin >> x >> y;
lca = LCA(x, y);
z = max(z, query(x, lca));
z = max(z, query(y, lca));
fout << z << "\n";
}
fcloseall();
}