#include<bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<int,int> PII;
int n,m,Q,visit[500005],d[500005],size=0;
vector<PII> g[500005];
PII heap[500005];
void push(PII x){
heap[++size]=x;
int now=size;
while(now>1){
int father=now/2;
if(heap[father]>=heap[now])swap(heap[father],heap[now]);
else break;
now=father;
}
return ;
}
void pop(){
swap(heap[1],heap[size]);
size--;
int now=1;
while(now*2<=size){
int next=now*2;
if(next+1<=size&&heap[next+1]<heap[next])next++;
if(heap[next]<heap[now])swap(heap[next],heap[now]);
else break;
now=next;
}
return ;
}
PII top(){
return heap[1];
}
void Dijkstra(int st){
memset(visit,0,sizeof(visit));
memset(d,0x3f,sizeof(d));
size=0;
int cnt=0;
d[st]=0;
push(make_pair(0,st));
while(cnt<n){
int u=top().second;pop();
if(visit[u])continue;
cnt++;
visit[u]=1;
for(auto it:g[u]){
int v=it.first,w=it.second;
if(d[v]>d[u]+w){
d[v]=d[u]+w;
push(make_pair(v,d[v]));
}
}
}
return ;
}
int main(){
scanf("%d%d%d",&n,&m,&Q);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(make_pair(v,w));
g[v].push_back(make_pair(u,w));
}
int l,r;
Dijkstra(1);
for(int i=1;i<=Q;i++){
scanf("%d%d",&l,&r);
printf("%d\n",d[l]+d[r]);
}
return 0;
}