//
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF=0x3f3f3f3f3f3f3f3fLL;
const int N=444;
LL dp[N][N];
int n,m,q;
void in()
{
memset( dp,0x3f,sizeof( dp ) );
LL a,b,c,i;
for( i=1;i<=m;i++ ) // <=m
{
cin>>a>>b>>c; // 防止出现重边
dp[a][b]=dp[b][a]=min( dp[a][b],c );
}
}
void floyd()
{
int i,j,k;
for( k=1;k<=n;k++ )
for( i=1;i<=n;i++ )
for( j=1;j<=n;j++ )
dp[i][j]=min( dp[i][j],dp[i][k]+dp[k][j] );
}
void out()
{
int a,b;
while( q-- )
{
cin>>a>>b;
if( dp[a][b]==INF ) cout<<"-1"<<endl;
else if( a==b ) cout<<"0"<<endl; // 特判同地点
else cout<<dp[a][b]<<endl;
}
}
int main()
{
while( cin>>n>>m>>q )
{
in(); floyd(); out();
}
return 0;
}