#include<bits/stdc++.h>
using namespace std;
#define N 1000010
#define int long long
struct no{
int x,y;
};
vector<no>qu[N];
int n,s,q,e,h[N],v[N*2],nxt[N*2],ec,in[N],w[N*2],ou[N],a[N],b[N],ct,d[N],mx[N],mn[N],mv[N],tg[N],vi[N],cc,dv[N],st[N],tp,ans[N],fw[N];
void add(int x,int y,int z){v[++ec]=y;w[ec]=z;nxt[ec]=h[x];h[x]=ec;}
void dfs(int x,int fa){
in[x]=++ct;
if(vi[x]){
mn[x]=++cc;
st[cc]=x;
}
else
mn[x]=1e9;
for(int i=h[x];i;i=nxt[i])
if(v[i]!=fa){
dv[v[i]]=dv[x]+w[i];
d[v[i]]=d[x]+1;
dfs(v[i],x);
mn[x]=min(mn[x],mn[v[i]]);
mx[x]=max(mx[x],mx[v[i]]);
}
ou[x]=ct;
if(vi[x])
mx[x]=cc;
}
void pd(int o){
if(tg[o]){
tg[o*2]+=tg[o];
tg[o*2+1]+=tg[o];
mv[o*2]+=tg[o];
mv[o*2+1]+=tg[o];
tg[o]=0;
}
}
void add(int o,int l,int r,int x,int y,int z){
if(x>y||x>1e8||y>1e8)
return;
if(r<x||y<l)
return;
if(x<=l&&r<=y){
mv[o]+=z;
tg[o]+=z;
return;
}
pd(o);
int md=(l+r)/2;
add(o*2,l,md,x,y,z);
add(o*2+1,md+1,r,x,y,z);
mv[o]=min(mv[o*2],mv[o*2+1]);
}
int qq(int o,int l,int r,int x,int y){
if(x>y||x>1e8||y>1e8)
return 1e18;
if(r<x||y<l)
return 1e18;
if(x<=l&&r<=y)
return mv[o];
int md=(l+r)/2;
pd(o);
return min(qq(o*2,l,md,x,y),qq(o*2+1,md+1,r,x,y));
}
void dd(int x,int fa){
for(int i=0;i<qu[x].size();i++){
no y=qu[x][i];
int e=a[y.x],f=b[y.x];
if(d[e]<d[f])
swap(e,f);
if(in[e]<=in[x]&&in[x]<=ou[e])
ans[y.y]=min(ans[y.y],qq(1,1,cc,mn[e],mx[e]));
else{
if(mn[e]>1)
ans[y.y]=min(ans[y.y],qq(1,1,cc,1,mn[e]-1));
if(mx[e]<cc)
ans[y.y]=min(ans[y.y],qq(1,1,cc,mx[e]+1,cc));
}
}
for(int i=h[x];i;i=nxt[i])
if(v[i]!=fa){
fw[v[i]]=w[i];
add(1,1,cc,mn[v[i]],mx[v[i]],-w[i]);
if(mn[v[i]]>1)
add(1,1,cc,1,mn[v[i]]-1,w[i]);
if(mx[v[i]]<cc)
add(1,1,cc,mx[v[i]]+1,cc,w[i]);
dd(v[i],x);
}
add(1,1,cc,mn[x],mx[x],fw[x]);
if(mn[x]>1)
add(1,1,cc,1,mn[x]-1,-fw[x]);
if(mx[x]<cc)
add(1,1,cc,mx[x]+1,cc,-fw[x]);
}
signed main(){
scanf("%lld%lld%lld%lld",&n,&s,&q,&e);
for(int i=1;i<n;i++){
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
a[i]=x;
b[i]=y;
add(x,y,z);
add(y,x,z);
}
for(int i=1;i<=s;i++){
int x;
scanf("%lld",&x);
vi[x]=1;
}
dfs(e,0);
memset(ans,127,sizeof(ans));
for(int i=1;i<=q;i++){
int x,y,e,f;
scanf("%lld%lld",&x,&y);
e=a[x];
f=b[x];
if(d[e]<d[f])
swap(e,f);
if(in[e]<=in[y]&&in[y]<=ou[e])
qu[y].push_back((no){x,i});
else
ans[i]=-1;
}
for(int i=1;i<=cc;i++)
add(1,1,cc,i,i,dv[st[i]]);
dd(e,0);
for(int i=1;i<=q;i++){
if(ans[i]==-1)
puts("escaped");
else if(ans[i]>1e17)
puts("oo");
else
printf("%lld\n",ans[i]);
}
}