beolvas = input()
beolvas = beolvas.strip().split(' ')
n = int(beolvas[0])
m = int(beolvas[1])
t = int(beolvas[2])
p = int(beolvas[3])
e = int(beolvas[4])
graf = []
kezd = []
for i in range(n+1):
graf.append([])
for i in range(m):
beolvas = input()
beolvas = beolvas.strip().split(' ')
lista = [beolvas[1], beolvas[2]]
graf[int(beolvas[0])].append(lista)
lista2 = [beolvas[0], beolvas[2]]
graf[int(beolvas[1])].append(lista2)
for i in range(p):
k = int(input())
kezd.append(k)
tom_tav = [-1]*(n+1)
tom_tav[6] = 0
def tomBejar(t, depth):
global tom_tav
for i in range(len(graf[t])):
if int(graf[t][i][1]) == 2:
if tom_tav[int(graf[t][i][0])] == -1 or tom_tav[int(graf[t][i][0])] > depth:
tom_tav[int(graf[t][i][0])] = depth
tomBejar(int(graf[t][i][0]), depth+1)
tomBejar(t, 1)
jerry_nyer = ['NEM']*p
jerry_tav = [-1]*(n+1)
def jerryBejar(index, j, depth):
global jerry_nyer
for i in range(len(graf[j])):
if tom_tav[int(graf[j][i][0])] == -1:
if int(graf[j][i][0]) == e:
jerry_nyer[index] = 'IGEN'
return
elif jerry_tav[int(graf[j][i][0])] == -1:
jerry_tav[int(graf[j][i][0])] = depth+1
jerryBejar(index, int(graf[j][i][0]), depth+1)
elif jerry_tav[int(graf[j][i][0])] > depth+1:
jerry_tav[int(graf[j][i][0])] = depth+1
jerryBejar(index, int(graf[j][i][0]), depth+1)
elif depth+1 < tom_tav[int(graf[j][i][0])]:
if int(graf[j][i][0]) == e:
jerry_nyer[index] = 'IGEN'
return
else:
if jerry_tav[int(graf[j][i][0])] == -1:
jerry_tav[int(graf[j][i][0])] = depth + 1
jerryBejar(index, int(graf[j][i][0]), depth + 1)
elif jerry_tav[int(graf[j][i][0])] > depth+1:
jerry_tav[int(graf[j][i][0])] = depth + 1
jerryBejar(index, int(graf[j][i][0]), depth + 1)
for i in range(p):
jerry_tav = [-1] * (n + 1)
jerry_tav[kezd[i]] = 0
jerryBejar(i, kezd[i], 0)
for i in jerry_nyer:
print(i)