#include <iostream>
#include <vector>
#include <deque>
using namespace std;
vector<int> jerry[100001];
vector<int> tom[100001];
int cel;
int lepesTom[100001]; //az adott helyre hány lépés alatt érhet Tom
int lepesJerry[100001];
void bejarJerry(int x, int d){
bool van_kitoltetlen = false;
vector<int> ures_szomszed;
for(int i=0; i<jerry[x].size(); i++){
if(lepesJerry[jerry[x][i]]==200000){
ures_szomszed.push_back(i);
}
}
/* if(lepesJerry[x]!=200000)
return;*/
cout<<x<<" "<<d<<endl;
//lepesJerry[x] = d;
for(int i=0; i<jerry[x].size(); i++){
if(lepesJerry[jerry[x][i]]==200000){
cout<<jerry[x][i]<<"állítom"<<endl;
lepesJerry[jerry[x][i]] = d+1;
}
}
for(int i=0; i<ures_szomszed.size(); i++){
bejarJerry(jerry[x][ures_szomszed[i]], d+1);
}
}
void bejarTom(int x, int d){ //x a hely poziciója, d a távolság a kezdoponttol
if(lepesTom[x]!=200000) //akkor már jártam
return;
lepesTom[x]=d;
for(int i=0; i<tom[x].size(); i++){
bejarTom(tom[x][i], d+1);
}
}
void bejarTom2(int x, int d){
deque<int> sor;
sor.push_back(x);
lepesTom[x]=d;
while(!sor.empty()){
int aktualis = sor[0];
sor.pop_front();
d++;
for(int i = 0;i < tom[aktualis].size();i++){
if (lepesTom[tom[aktualis][i]]==200000){
lepesTom[tom[aktualis][i]]=lepesTom[aktualis]+1;
sor.push_back(tom[aktualis][i]);
}
}
}
}
int szint[100001];
void bejarJerry2(int x, int d, int vege){
deque<int> sor;
sor.push_back(x);
lepesJerry[x]=0;
while(!sor.empty()){
int aktualis = sor[0];
if(lepesTom[aktualis]<=lepesJerry[aktualis]){
sor.pop_front();
continue;
}
if (aktualis==vege){
cel= true;
break;
}
sor.pop_front();
for(int i = 0;i < jerry[aktualis].size();i++){
if (lepesJerry[jerry[aktualis][i]]==200000){
lepesJerry[jerry[aktualis][i]]=lepesJerry[aktualis]+1;
sor.push_back(jerry[aktualis][i]);
}
}
}
}
bool benne_van(vector<int> x, int szam){
for(int i=0; i<x.size();i++){
if(x[i]==szam)
return true;
}
return false;
}
int main()
{
int hely;
int utak;
int tom_start;
int m;
int vege;
cin>>hely;
cin>>utak;
cin>>tom_start;
cin>>m;
cin>>vege;
//vector<int> jerry[hely+1];
//vector<int> tom[hely+1];
int honnan, hova, szelesseg;
for(int i=0; i<utak; i++){
cin>>honnan;
cin>>hova;
cin>>szelesseg;
//if(benne_van(jerry[honnan], hova)==false)
jerry[honnan].push_back(hova);
//if(benne_van(jerry[hova], honnan)==false)
jerry[hova].push_back(honnan);
if(szelesseg==2){
//if(benne_van(tom[honnan], hova)==false)
tom[honnan].push_back(hova);
//if(benne_van(tom[hova], honnan)==false)
tom[hova].push_back(honnan);
}
}
for(int i=1; i<=hely; i++){
lepesTom[i]=200000;
}
bejarTom2(tom_start, 0);
/*for(int i=1; i<=hely; i++){
cout<<i<<". csomopontba "<<lepesTom[i]<<" lepes alatt jut el Jerry"<<endl;
}*/
int jindul;
for(int j=0; j<m;j++){
cin >> jindul;
for (int i=1; i<=hely;i++){
lepesJerry[i]=200000;
}
cel = false;
bejarJerry2(jindul, 0, vege);
if(cel==true)
cout <<"IGEN"<< endl;
else
cout << "NEM" << endl;
}
/* for(int i=1; i<=hely; i++){
cout<<i<<". csomopontba "<<lepesJerry[i]<<" lepes alatt jut el Jerry"<<endl;
}*/
/*for(int i=1; i<=hely; i++){
lepesJerry[i]=200000;
}
lepesJerry[8]=0;
bejarJerry(8, 0);
cout<<"*";
for(int i=1; i<=hely; i++){
cout<<i<<". pontba "<<lepesJerry[i]<<" allatt megy Jerry."<<endl;
}*/
return 0;
}