#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <limits.h>#include <time.h>#include <string.h>using namespace std;#define LL long long#define PI acos(-1.0)#define MAX INT_MAX#define MIN INT_MIN#define eps 1e-10#define FRE freopen("a.txt","r",stdin)#define N 305int min(int a,int b){return a>b?a:b;}int max(int a,int b){return a>b?b:a;}LL g[N][N];int main(){ int i,j,kk; int n,m,k; while(scanf("%d%d%d",&n,&m,&k)!=EOF){ for(i=0;i<=n;i++) for(j=0;j<=n;j++) g[i][j]=MAX; while(m--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); g[a][b]=c; } for(kk=1;kk<=n;kk++){ for(i=1;i<=n;i++){ if(g[i][kk]==MAX)continue; for(j=1;j<=n;j++){ if(g[kk][j]==MAX)continue; int maxm=max(g[i][kk],g[kk][j]); if(maxm<g[i][j]) g[i][j]=maxm; } } } while(k--){ int a,b; scanf("%d%d",&a,&b); if(g[a][b]==MAX)puts("-1"); else printf("%I64d\n",g[a][b]); } } return 0;}