#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define pb push_back
const lli mod=1e9+7;
const lli mod1=998244353;
#define fi first
#define se second
vector<pair<lli,lli> > v[100001];
lli lca[100001][18];
lli level[100001];
lli sum[100001]={0};
lli dfs(lli node,lli par,lli lev,lli sum1)
{
level[node]=lev;
lca[node][0]=par;
sum[node]=sum[par]+sum1;
for(pair<lli,lli> child:v[node])
{
if(child.fi!=par)
dfs(child.fi,node,lev+1,child.se);
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
lli T;
cin>>T;
while(T--)
{
lli i,n,q,j,root;
cin>>n>>q>>root;
lli x=log2(n)+1;
lli p,r,w;
for(i=0;i<n-1;i++)
{
cin>>p>>r>>w;
v[r].pb({p,w});
v[p].pb({r,w});
}
for(i=1;i<=n;i++)
{
for(j=1;j<x;j++)
{
lca[i][j]=-1;
}
}
dfs(root,0,0,0);
for(j=1;j<x;j++)
{
for(i=1;i<=n;i++)
{
if(lca[i][j-1]!=-1)
{
lli par=lca[i][j-1];
lca[i][j]=lca[par][j-1];
}
}
}
lli b,c;
while(q--)
{
cin>>b>>c;
lli ans=sum[b]+sum[c];
if(level[b]>level[c]) swap(b,c);
lli d=level[c]-level[b];
lli r;
while(d>0)
{
i=log2(d);
c=lca[c][i];
d-=(1<<i);
}
for(i=x-1;i>=0;i--)
{
if(lca[c][i]!=-1 && lca[c][i]!=lca[b][i])
{
c=lca[c][i],b=lca[b][i];
}
}
b=lca[b][0];
ans-=(2*sum[b]);
cout<<ans<<endl;
}
for(i=0;i<=n;i++)
v[i].clear(),level[i]=-1,sum[i]=0;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsaTsKI2RlZmluZSBwYiBwdXNoX2JhY2sKY29uc3QgbGxpIG1vZD0xZTkrNzsKY29uc3QgbGxpIG1vZDE9OTk4MjQ0MzUzOwojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCnZlY3RvcjxwYWlyPGxsaSxsbGk+ID4gdlsxMDAwMDFdOwpsbGkgbGNhWzEwMDAwMV1bMThdOwpsbGkgbGV2ZWxbMTAwMDAxXTsKbGxpIHN1bVsxMDAwMDFdPXswfTsKbGxpIGRmcyhsbGkgbm9kZSxsbGkgcGFyLGxsaSBsZXYsbGxpIHN1bTEpCnsKICAgIGxldmVsW25vZGVdPWxldjsKICAgIGxjYVtub2RlXVswXT1wYXI7CiAgICBzdW1bbm9kZV09c3VtW3Bhcl0rc3VtMTsKICAgIGZvcihwYWlyPGxsaSxsbGk+IGNoaWxkOnZbbm9kZV0pCiAgICB7CiAgICAgICAgaWYoY2hpbGQuZmkhPXBhcikKICAgICAgICBkZnMoY2hpbGQuZmksbm9kZSxsZXYrMSxjaGlsZC5zZSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGxsaSBUOwogICAgY2luPj5UOwogICAgd2hpbGUoVC0tKQogICAgewogICAgICAgIGxsaSBpLG4scSxqLHJvb3Q7CiAgICAgICAgY2luPj5uPj5xPj5yb290OwogICAgICAgIGxsaSB4PWxvZzIobikrMTsKICAgICAgICBsbGkgcCxyLHc7CiAgICAgICAgZm9yKGk9MDtpPG4tMTtpKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4+PnA+PnI+Pnc7CiAgICAgICAgICAgIHZbcl0ucGIoe3Asd30pOwogICAgICAgICAgICB2W3BdLnBiKHtyLHd9KTsKICAgICAgICB9CiAgICAgICAgZm9yKGk9MTtpPD1uO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihqPTE7ajx4O2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGNhW2ldW2pdPS0xOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRmcyhyb290LDAsMCwwKTsKICAgICAgICBmb3Ioaj0xO2o8eDtqKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IoaT0xO2k8PW47aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihsY2FbaV1bai0xXSE9LTEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbGxpIHBhcj1sY2FbaV1bai0xXTsKICAgICAgICAgICAgICAgICAgICBsY2FbaV1bal09bGNhW3Bhcl1bai0xXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsbGkgYixjOwogICAgICAgIHdoaWxlKHEtLSkKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+Yj4+YzsKICAgICAgICAgICAgbGxpIGFucz1zdW1bYl0rc3VtW2NdOwogICAgICAgICAgICBpZihsZXZlbFtiXT5sZXZlbFtjXSkgc3dhcChiLGMpOwogICAgICAgICAgICBsbGkgZD1sZXZlbFtjXS1sZXZlbFtiXTsKICAgICAgICAgICAgbGxpIHI7CiAgICAgICAgICAgIHdoaWxlKGQ+MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaT1sb2cyKGQpOwogICAgICAgICAgICAgICAgYz1sY2FbY11baV07CiAgICAgICAgICAgICAgICBkLT0oMTw8aSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGk9eC0xO2k+PTA7aS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihsY2FbY11baV0hPS0xICYmIGxjYVtjXVtpXSE9bGNhW2JdW2ldKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGM9bGNhW2NdW2ldLGI9bGNhW2JdW2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGI9bGNhW2JdWzBdOwogICAgICAgICAgICBhbnMtPSgyKnN1bVtiXSk7CiAgICAgICAgICAgIGNvdXQ8PGFuczw8ZW5kbDsKICAgICAgICB9CiAgICAgICAgZm9yKGk9MDtpPD1uO2krKykKICAgICAgICAgICAgdltpXS5jbGVhcigpLGxldmVsW2ldPS0xLHN1bVtpXT0wOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCgoKCgoKCgoKCgoKCgoKCgo=