#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
typedef long long int ll;
ll dist[200000];
vector <int> v[200000],w[200000];
int parent[200000][20];
int D[200000];
int depth;
void dfs(int x,int p){
depth++;
D[x]=depth;
int mx=log2(depth);
parent[x][0]=p;
for(int i=1;i<=mx;i++)parent[x][i]=parent[parent[x][i-1]][i-1];
for(int i=0;i<v[x].size();i++){
int node=v[x][i];
if(node==p)continue;
int weight=w[x][i];
dist[node]=dist[x]+weight;
dfs(node,x);
}
depth--;
}
int lca(int x,int y){
while(D[x]<D[y]){
int jump=log2(D[y]-D[x]);
y=parent[y][jump];
}
while(D[y]<D[x]){
int jump=log2(D[x]-D[y]);
x=parent[x][jump];
}
if(x==y)return y;
int mx=log2(D[x]);
for(int i=mx;i>=0;i--){
int px=parent[x][i];
int py=parent[y][i];
if(px!=py){
x=px;
y=py;
}
}
return parent[x][0];
}
ll distance(int a,int b){
return dist[a]-dist[b];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
scanf("%d",&t);
while(t--){
int n,q,r;
scanf("%d %d %d",&n,&q,&r);
for(int i=1;i<=n;i++){
v[i].clear();
w[i].clear();
}
for(int i=1;i<n;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
v[a].push_back(b);
v[b].push_back(a);
w[a].push_back(c);
w[b].push_back(c);
}
depth=-1;
dist[1]=0;
dfs(1,0);
while(q--){
int u,v;
scanf("%d %d",&u,&v);
int l=lca(u,v);
ll ans=distance(u,l)+distance(v,l);
printf("%lld\n",ans);
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PiAKI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwpsbCBkaXN0WzIwMDAwMF07CnZlY3RvciA8aW50PiB2WzIwMDAwMF0sd1syMDAwMDBdOwppbnQgcGFyZW50WzIwMDAwMF1bMjBdOwppbnQgRFsyMDAwMDBdOwppbnQgZGVwdGg7CnZvaWQgZGZzKGludCB4LGludCBwKXsKICAgIGRlcHRoKys7CiAgICBEW3hdPWRlcHRoOwogICAgaW50IG14PWxvZzIoZGVwdGgpOwogICAgcGFyZW50W3hdWzBdPXA7CiAgICBmb3IoaW50IGk9MTtpPD1teDtpKyspcGFyZW50W3hdW2ldPXBhcmVudFtwYXJlbnRbeF1baS0xXV1baS0xXTsKICAgIGZvcihpbnQgaT0wO2k8dlt4XS5zaXplKCk7aSsrKXsKICAgICAgICBpbnQgbm9kZT12W3hdW2ldOwogICAgICAgIGlmKG5vZGU9PXApY29udGludWU7CiAgICAgICAgaW50IHdlaWdodD13W3hdW2ldOwogICAgICAgIGRpc3Rbbm9kZV09ZGlzdFt4XSt3ZWlnaHQ7CiAgICAgICAgZGZzKG5vZGUseCk7CiAgICB9CiAgICBkZXB0aC0tOwp9CmludCBsY2EoaW50IHgsaW50IHkpewogICAgd2hpbGUoRFt4XTxEW3ldKXsKICAgICAgICBpbnQganVtcD1sb2cyKERbeV0tRFt4XSk7CiAgICAgICAgeT1wYXJlbnRbeV1banVtcF07CiAgICB9CiAgICB3aGlsZShEW3ldPERbeF0pewogICAgICAgIGludCBqdW1wPWxvZzIoRFt4XS1EW3ldKTsKICAgICAgICB4PXBhcmVudFt4XVtqdW1wXTsKICAgIH0KICAgIGlmKHg9PXkpcmV0dXJuIHk7CiAgICBpbnQgbXg9bG9nMihEW3hdKTsKICAgIGZvcihpbnQgaT1teDtpPj0wO2ktLSl7CiAgICAgICAgaW50IHB4PXBhcmVudFt4XVtpXTsKICAgICAgICBpbnQgcHk9cGFyZW50W3ldW2ldOwogICAgICAgIGlmKHB4IT1weSl7CiAgICAgICAgICAgIHg9cHg7CiAgICAgICAgICAgIHk9cHk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcmVudFt4XVswXTsKfQpsbCBkaXN0YW5jZShpbnQgYSxpbnQgYil7CiAgICByZXR1cm4gZGlzdFthXS1kaXN0W2JdOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgaW50IG4scSxyOwogICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsJm4sJnEsJnIpOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICAgICAgdltpXS5jbGVhcigpOwogICAgICAgICAgICB3W2ldLmNsZWFyKCk7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgICAgICBpbnQgYSxiLGM7CiAgICAgICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsJmEsJmIsJmMpOwogICAgICAgICAgICB2W2FdLnB1c2hfYmFjayhiKTsKICAgICAgICAgICAgdltiXS5wdXNoX2JhY2soYSk7CiAgICAgICAgICAgIHdbYV0ucHVzaF9iYWNrKGMpOwogICAgICAgICAgICB3W2JdLnB1c2hfYmFjayhjKTsKICAgICAgICB9CiAgICAgICAgZGVwdGg9LTE7CiAgICAgICAgZGlzdFsxXT0wOwogICAgICAgIGRmcygxLDApOwogICAgICAgIHdoaWxlKHEtLSl7CiAgICAgICAgICAgIGludCB1LHY7CiAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsJnUsJnYpOwogICAgICAgICAgICBpbnQgbD1sY2EodSx2KTsKICAgICAgICAgICAgbGwgYW5zPWRpc3RhbmNlKHUsbCkrZGlzdGFuY2UodixsKTsKICAgICAgICAgICAgcHJpbnRmKCIlbGxkXG4iLGFucyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=