RT
#include<iostream>
#include<vector>
#include<map>
using namespace std;
#define int unsigned int
int xu[41000],cnt1,lca,n1,x,y,z,q,n,m,vv[41000],e1[41000],idx1=2,ne1[41000],h1[41000],
he[41451],inzhan[41451],zhan[44514],cnt,ju[44514],duiying[41000],fan[41000];
void add1(int u,int v1,int v2){
e1[idx1]=v1,ne1[idx1]=h1[u],vv[idx1]=v2,h1[u]=idx1++;
}
map<pair<int,int>,int>dis;
vector<int>dian[20010],huan[20010];//点属于那些环,一个环中有那些点
void dfs1(int jie,int fa){
xu[jie]=1;
zhan[++cnt]=jie;
inzhan[jie]=1;
for(int i=h1[jie];i;i=ne1[i]){
if(e1[i]==fa||(xu[e1[i]]&&(inzhan[e1[i]]==0)))
continue;
if(inzhan[e1[i]]){
he[++cnt1]=vv[i]-ju[e1[i]]+ju[jie];
fan[cnt1]=++n;
duiying[n]=cnt1;
while((zhan[cnt]!=e1[i])&&cnt){
inzhan[zhan[cnt]]=0;
huan[cnt1].push_back(zhan[cnt]);
dian[zhan[cnt]].push_back(cnt1);
dis[{zhan[cnt],cnt1}]=ju[zhan[cnt--]]-ju[e1[i]];
//dis[zhan[cnt]]=
}
if(cnt||(zhan[1]==e1[i])){
huan[cnt1].push_back(e1[i]);
dian[e1[i]].push_back(cnt1);
dis[{zhan[cnt],cnt1}]=ju[zhan[cnt]]-ju[e1[i]];
while(zhan[++cnt]);
cnt--;
}else{
while(zhan[cnt]){
huan[cnt1].pop_back();
dian[zhan[cnt++]].pop_back();
}
cnt1--;
}
continue;
}
ju[e1[i]]=ju[jie]+vv[i];
//zhan2[cnt]=i;
dfs1(e1[i],jie);
}
zhan[cnt--]=inzhan[jie]=0;
}
#define jl(x,y,z) min((max(dis[{x,z}],dis[{y,z}])-min(dis[{x,z}],dis[{y,z}])),he[z]-max(dis[{x,z}],dis[{y,z}])+min(dis[{x,z}],dis[{y,z}]))
int e[41000],idx=2,ne[41000],h[41000],v[41000];
bool fang[41000];
void add(int u,int v1,int v2){
e[idx]=v1,ne[idx]=h[u],v[idx]=v2,h[u]=idx++;
}
void dfs2(int jie){
inzhan[jie]=zhan[jie]=1;
for(int i=0;i<dian[jie].size();i++){
if(fang[dian[jie][i]])
continue;
fang[dian[jie][i]]=1;
add(jie,fan[dian[jie][i]],0);
// duiying[n]=dian[jie][i];
for(int j=0;j<huan[dian[jie][i]].size();j++){
if(huan[dian[jie][i]][j]==jie)
continue;
add(fan[dian[jie][i]],huan[dian[jie][i]][j],jl(jie,huan[dian[jie][i]][j],dian[jie][i]));
inzhan[huan[dian[jie][i]][j]]=1;
}
for(int j=0;j<huan[dian[jie][i]].size();j++){
if(zhan[huan[dian[jie][i]][j]])continue;
dfs2(huan[dian[jie][i]][j]);
}
}
for(int i=h1[jie];i;i=ne1[i]){
if(inzhan[e1[i]])
continue;
add(jie,e1[i],vv[i]);
dfs2(e1[i]);
}
}
int read() {
int x = 0;
char ch = 0;
while (ch < '0' || ch > '9') {
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + (ch - '0');
ch = getchar();
}
return x;
}
int son[41000],fa1[41000],fa[41000],s[41000],size[41000],dep[41000],jf[41000];
void dfs3(int jie,int fa){
fa1[jie]=fa;dep[jie]=dep[fa]+1;
int maxx=0;
size[jie]=1;
for(int i=h[jie];i;i=ne[i]){
if(e[i]==fa)
continue;
dfs3(e[i],jie);
size[jie]+=size[e[i]];
if(maxx<size[e[i]])
son[jie]=e[i],maxx=size[e[i]];
}
}
void dfs4(int jie,int fa1){
fa[jie]=fa1;
for(int i=h[jie];i;i=ne[i]){
if(son[jie]==e[i]){
xu[son[jie]]=++cnt;
jf[son[jie]]=s[cnt]=v[i];
dfs4(son[jie],fa1);
}
}
for(int i=h[jie];i;i=ne[i]){
if(e[i]==son[jie])
continue;
xu[e[i]]=++cnt;
jf[e[i]]=s[cnt]=v[i];
dfs4(e[i],e[i]);
}
}
int lca1(int x,int y){
while(1){
if(fa[x]==fa[y]){
if(dep[x]>dep[y])
return y;
return x;
}
if(dep[fa[x]]>dep[fa[y]]){
x=fa1[fa[x]];
}else{
y=fa1[fa[y]];
}
}
}
void write(int x) {
static int sta[35];
int top = 0;
do {
sta[top++] = x % 10, x /= 10;
} while (x);
while (top) putchar(sta[--top] + 48);
putchar('\n');
}
int qurry(int x,int y){
int ret=0;
/*while(x^y){
if(dep[x]<dep[y]){
ret+=jf[y],y=fa1[y];
}else{
ret+=jf[x],x=fa1[x];
}
}return ret;*/
while(1){
if(fa[x]==fa[y]){
if(dep[x]>dep[y])
return ret+s[xu[x]]-s[xu[y]];
return ret+s[xu[y]]-s[xu[x]];
}
if(dep[fa[x]]>dep[fa[y]]){
ret+=s[xu[x]]-s[xu[fa[x]]]+jf[fa[x]];
x=fa1[fa[x]];
}else{
ret+=s[xu[y]]-s[xu[fa[y]]]+jf[fa[y]];
y=fa1[fa[y]];
}
}
}
int lxia(int x){
while(fa[x]!=fa[lca]){
x=fa[x];
if(fa1[x]!=lca)
x=fa1[x];
else
return x;
}return son[lca];
}
signed main(){
// freopen("P5236_1.in","r",stdin);
// freopen("P5236.txt","w",stdout);
// system("fc P5236.txt P5236_1.out");
n1=n=read(),m=read(),q=read();
for(int i=1;i<=m;i++){
x=read(),y=read(),z=read();
add1(x,y,z),add1(y,x,z);
}
dfs1(1,0);cnt=0;
for(int i=1;i<=n;i++)zhan[i]=inzhan[i]=0;
dfs2(1);xu[1]=cnt=1;
dfs3(1,0);
dfs4(1,1);
for(int i=2;i<=n;i++)
s[i]=s[i-1]+s[i];
while(q--){
x=read(),y=read();
lca=lca1(x,y);
if(lca<=n1){
write(qurry(x,y));
continue;
}
m=lxia(x),z=lxia(y);
write(qurry(x,m)+qurry(y,z)+jl(m,z,duiying[lca]));
}
return 0;
}
/*
10 11 1
1 2 1
1 5 2
1 6 2
1 10 2
2 3 1
3 4 1
4 5 1
6 7 1
7 8 3
8 9 1
9 10 1
5 6
10 12 1
1 2 1
2 4 1
4 5 1
5 3 1
3 1 1
5 6 1
6 7 1
7 8 1
8 5 1
5 9 1
9 10 1
5 10 1
9 7
*/