#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define INF 1000000
using namespace std;
int gr[105][105];
int _mn(int a,int b)
{
if(a>b)
return b;
return a;
}
int _mx(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
bool f=0;
int kase=1;
int C,S,Q;
int a,b,d;
while(cin>>C)
{
cin>>S>>Q;
if(C+S+Q==0)
break;
for(int i=1;i<105;i++)
{
for(int j=1;j<105;j++)
{
if(i==j)
gr[i][j]=0;
else
gr[i][j]=INF;
}
}
for(int i=1;i<=S;i++)
{
cin>>a>>b>>d;
gr[a][b]=d;
gr[b][a]=d;
}
for(int i=1;i<=C;i++)
{
for(int j=1;j<=C;j++)
{
for(int k=1;k<=C;k++)
{
gr[j][k]=_mn(gr[j][k],_mx(gr[j][i],gr[i][k]));
}
}
}
if(f)
cout<<"\n";
f=1;
cout<<"Case #"<<kase++<<"\n";
for(int i=0;i<Q;i++)
{
cin>>a>>b;
if(gr[a][b]==INF)
cout<<"no path\n";
else
cout<<gr[a][b]<<"\n";
}
}
return 0;
}