#include <bits/stdc++.h>
using namespace std;
vector<bool> canDo;
void jerrybejar(vector<vector<int>>& type,int pos,int dist, vector<vector<int>>& graf,vector<int>& tomEler,vector<bool>& volt,int lyukpos,int id)
{
for(int x: graf[pos])
{
//cout << x << "-" << dist << endl;
if(volt[x]==false && dist < tomEler[x])
{
volt[x] = true;
if(x == lyukpos)
{
//cout << "TRUE\n";
canDo[id] = true;
}
else
{
jerrybejar(type,x,dist+1,graf,tomEler,volt,lyukpos,id);
}
}
}
}
void tombejar(vector<vector<int>>& type,int pos,int dist, vector<vector<int>>& graf,vector<int>& tomEler,vector<bool>& volt)
{
for(int x: graf[pos])
{
//cout << x << "-" << dist << endl;
if(volt[x]==false && type[pos][x] == 2)
{
volt[x] = true;
tomEler[x] = dist+1;
tombejar(type,x,dist+1,graf,tomEler,volt);
}
}
}
int main()
{
int csomopont, jarat, tomPos,probalkozas,lyukPos;
cin >> csomopont >> jarat >> tomPos >> probalkozas >> lyukPos;
//vector<int> jerryEler(csomopont);
vector<int> tomEler(csomopont,INT_MAX);
vector<vector<int>> graf(csomopont+1); //melyik pontból melyikbe lehet menni
vector<bool> volt(csomopont+1,false); //volt-e már ott
vector<vector<int>> type(csomopont+1,vector<int>(csomopont+1,-1)); // milyen tipusú
int t1,t2,t3;
for(int i = 0; i < jarat; i++)
{
cin >> t1 >> t2 >> t3;
graf[t1].push_back(t2);
graf[t2].push_back(t1);
type[t1][t2] = t3;
type[t2][t1] = t3;
}
canDo.resize(probalkozas,false);
tomEler[tomPos] = 0;
volt[tomPos] = true;
tombejar(type,tomPos,0,graf,tomEler,volt);
// for(int x:tomEler)
// {
// cout << x << " ";
// }
for(int i = 0; i < probalkozas;i++)
{
volt.assign(csomopont+1,false);
cin >> t1; //jerry pos
volt[t1] = true;
jerrybejar(type,t1,0,graf,tomEler,volt,lyukPos,i);
}
for(bool c: canDo)
{
if(c)
{
cout << "IGEN\n";
}
else
{
cout << "NEM\n";
}
}
}