#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,m,x,y,c,dist[10005],q,max1,max2,viz[10005];
vector <pair <int ,int > > v[10005];
vector < pair <int ,int > > l,gf[10005];
priority_queue < pair < pair < int ,int > , pair <int ,int > > >coada;
void citire()
{
scanf("%d%d%d",&n,&m,&q);
for (int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
}
}
int ok=0;
int dfs(int nod,int nodf,int &maxc)
{
viz[nod]=1;
if (nodf==nod)
return 1;
for (vector <pair <int ,int > >:: iterator it=gf[nod].begin();it!=gf[nod].end();++it)
{
if (!viz[it->first])
if (dfs(it->first,nodf,maxc))
{
if (maxc<it->second)
{
maxc=it->second;
max1=nod;
max2=it->first;
}
viz[it->first]=0;
return 1;
}
}
return 0;
}
void rezolv()
{
coada.push(make_pair(make_pair(0,0),make_pair(1,1)));
while (!coada.empty())
{
int nod=coada.top().second.first;
int nod2=coada.top().second.second;
int cost=-coada.top().first.first;
dist[nod2]=cost;
gf[nod2].push_back(make_pair(nod,coada.top().first.second));
gf[nod].push_back(make_pair(nod2,coada.top().first.second));
coada.pop();
for (vector <pair <int ,int > >:: iterator it=v[nod2].begin();it!=v[nod2].end();++it)
if (!dist[it->first] && it->first!=1)
coada.push(make_pair(make_pair(-it->second-cost,it->second),make_pair(nod2,it->first)));
}
}
int main()
{
freopen("apm2.in","r",stdin);
freopen("apm2.out","w",stdout);
citire();
rezolv();
for (int i=1;i<=q;++i)
{
scanf("%d%d",&x,&y);
int maxc=0;
memset(viz,0,sizeof(viz));
dfs(x,y,maxc);
printf("%d\n",maxc-1);
}
return 0;
}