#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#define MAXN 110
#define INTFY 1<<22
using namespace std;
int mmp[MAXN][MAXN];
int main(void)
{
int n, e, a;
int k = 0;
while (scanf_s("%d%d%d", &n, &e, &a) != EOF && n + e + a)
{
if (k > 0)putchar('\n');
printf("Case #%d\n", ++k);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
mmp[i][j] = INTFY;
//memset(dist, -1, sizeof(dist));
for (int i = 0; i < e; i++)
{
int from, to, val;
scanf_s("%d%d%d", &from, &to, &val);
mmp[from - 1][to - 1] = mmp[to - 1][from - 1] = val;
}
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
mmp[i][j] = min(mmp[i][j], max(mmp[i][k], mmp[k][j]));
//本题的核心:意思是走到这里有两条路,相当于在三段路中选着最大噪音最小的
for (int i = 0; i < a; i++)
{
int from, to;
scanf_s("%d%d", &from, &to);
if (mmp[from - 1][to - 1] == INTFY)
printf("no path\n");//去不到那里
else
printf("%d\n", mmp[from - 1][to - 1]);
}
}
return 0;
}