#include <cstdio>
#include <set>
using namespace std;
#define DIM 15005
#define mp make_pair
const int INF = 1<<30;
struct nod
{
int x, cost, uz;
nod *next;
nod()
{
uz = 0;
}
};
set < pair<int, int> > S;
nod *G[DIM], *GP[DIM];
int n, m, k, vs[DIM], vd[DIM], Min = INF, v[DIM], t[DIM];
void addMuchie(int i, int j, int c, nod *G[])
{
nod *p = new nod;
p -> x = j;
p -> cost = c;
p -> next = G[i];
G[i] = p;
if (i == 1)
S.insert(mp(c, j));
}
void read()
{
FILE *f = fopen("radiatie.in", "r");
fscanf(f, "%d%d%d", &n, &m, &k);
for (int x, y, c;m;--m)
{
fscanf(f, "%d%d%d", &x, &y, &c);
addMuchie(x, y, c, G);
addMuchie(y, x, c, G);
}
for (int i = 1; i <= k; ++i)
fscanf(f, "%d%d", &vs[i], &vd[i]);
fclose(f);
}
void DFS(int i, int d, int lmax)
{
if (i == d)
{
if (lmax < Min)
Min = lmax;
return;
}
for (nod *p = GP[i]; p; p = p->next)
if (!v[p->x])
{
if (p->cost > Min) continue;
v[p->x] = 1;
DFS(p->x, d, (p->cost) < lmax ? lmax : (p->cost));
v[p->x] = 0;
}
}
FILE *f = fopen("radiatie.out", "w");
void curata()
{
for (int i = 1; i <= n; ++i)
v[i] = 0;
fprintf (f, "%d\n", Min);
}
void solve()
{
for (int i = 1; i <= k; ++i)
DFS(vs[i], vd[i], -1), curata(), Min = INF;
}
void afis(nod *G[])
{
for (int i = 1; i <= n; ++i)
{
printf ("%d:", i);
for (nod *p = G[i]; p; p=p->next)
printf ("%d ", p->x);
printf("\n");
}
}
void apm()
{
int d[DIM];
for (int i = 1; i <= n; ++i)
d[i] = INF, t[i] = INF, v[i] = 0;
d[1] = 0;t[1] = 0;
S.insert(mp(0, 1));
for (nod *p = G[1]; p; p=p->next)
d[p->x] = p->cost, t[p->x] = 1, S.insert(mp(p->cost, p->x));
for (int k = 1; k < n; ++k)
{
int i = S.begin()->second;
S.erase(*S.begin());
v[i] = 1;
for (nod *p = G[i]; p ; p=p->next)
if (d[p->x] > p->cost && !v[p->x])
d[p->x] = p->cost, S.insert(mp(p->cost, p->x)), t[p->x] = i;
}
for (int i = 1; i <= n; ++i)
if (t[i] != 0)
addMuchie(i, t[i], d[i], GP), addMuchie(t[i], i, d[i], GP), v[i] = 0;
// afis(GP);
}
int main()
{
read();
apm();
solve();
fclose(f);
return 0;
}