#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)
int const N = 2e5+10;
vector<pii> adj[N];
int intime[N];
int outtime[N];
int t = 0;
void dfs(int n,int p){
intime[n] = t++;
for(auto [k,w]:adj[n]){
if(k != p) dfs(k,n);
}
outtime[n] = t;
}
int main(){
int n;cin >> n;
int S;cin >> S;
int q;cin >> q;
int e;cin >> e;
vector<pii> edge;
for(int i{};i < n-1;i++){
int a,b,c;cin >> a >> b >> c;
adj[a].emplace_back(b,c);
adj[b].emplace_back(a,c);
edge.emplace_back(a,b);
}
dfs(e,-1);
vector<int> shop;
for(int i{};i < S;i++){
int g;cin >> g;
shop.emplace_back(g);
}
for(int i{};i < q;i++){
int cut,pos;cin >> cut >> pos;
auto [a,b] = edge[cut-1];
int subtree;
if(intime[a] > intime[b]) subtree = a;
else subtree = b;
if(intime[pos] >= intime[subtree] && outtime[pos] <= outtime[subtree]){
cout << 0;
}
else cout << "escaped";
cout << endl;
}
}