#include<iostream>
#include<cstring>
using namespace std;
const int N=210;
const int INF=0x3f3f3f3f;
int n,m,q;
int d[N][N];
void floyd() {
for(int k=1; k<=n; k++) {
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
}
}
}
int main() {
cin>>n>>m>>q;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(i==j) d[i][j]=0;
else d[i][j]=INF;
}
}
for(int i=0; i<m; i++) {
int a,b,c;
cin>>a>>b>>c;
d[a][b]=c;
}
floyd();
for(int i=0; i<q; i++) {
int a, b;
cin>>a>>b;
if(d[a][b]>=INF/2) cout<<"impossible\n";
else cout<<d[a][b]<<endl;
}
return 0;
}
/*
3 3 2
1 2 1
2 3 2
1 3 1
2 1
1 3
*/