#include <bits/stdc++.h>
using namespace std;
int maxn=100001;
vector<pair<int,int>> g[100001];
vector<int> tomt(maxn);
void bfst(int t){
bool seen[maxn];
tomt[t]=0;
queue<int> q;
q.push(t);
seen[t]=true;
while (!q.empty()){
int v=q.front();
q.pop();
for (auto edge:g[v]){
if (edge.second==2 && !seen[edge.first]){
tomt[edge.first]=tomt[v]+1;
seen[edge.first]=true;
q.push(edge.first);
}
}
}
tomt[t]=-1;
}
vector<int> tavok(maxn);
void bfse(int e){
vector<bool> seen;
seen.assign(maxn, 0);
tavok[e]=maxn;
priority_queue<pair<int,int>> q;
q.push({tavok[e],e});
seen[e]=true;
while (!q.empty()){
int v=q.top().second;
q.pop();
for (auto edge:g[v]){
if (!seen[edge.first]){
if (tomt[edge.first]==0) tavok[edge.first]=tavok[v]-1;
else{
tavok[edge.first]=min(tomt[edge.first]-1, tavok[v]-1);
}
q.push({tavok[edge.first],edge.first});
seen[edge.first]=true;
}
}
}
}
int main() {
int n,m,t,j,e;
cin>>n>>m>>t>>j>>e;
for (int i=0; i<m;i++){
int x,y,z;
cin>>x>>y>>z;
g[x].push_back(make_pair(y,z));
g[y].push_back(make_pair(x,z));
}
bfst(t);
bfse(e);
for (int i=0; i<j;i++){
int x;
cin >>x;
if (tavok[x]>=0 && x!=t) cout<<"IGEN"<<endl;
else cout<<"NEM"<<endl;
}
}