#include<bits/stdc++.h>
using namespace std;
int w,i1,n,g;
int f[201][201][5];
string s;
map<string,bool> mpw;
map<string,bool> mpi;
map<string,bool> mpn;
map<string,bool> mpg;
int main()
{
cin>>w>>i1>>n>>g;
for(int i=1;i<=w;i++)
{
string a;
cin>>a;
mpw[a]=1;
}
for(int i=1;i<=i1;i++)
{
string a;
cin>>a;
mpi[a]=1;
}
for(int i=1;i<=n;i++)
{
string a;
cin>>a;
mpn[a]=1;
}
for(int i=1;i<=g;i++)
{
string a;
cin>>a;
mpg[a]=1;
}
cin>>s;
s=" "+s;
int lens=s.size();
for(int i=1;i<lens-1;i++){
int j=i+1;
string b=s.substr(i,2);
if(mpw[b]) f[i][j][1]=1;
if(mpi[b]) f[i][j][2]=1;
if(mpn[b]) f[i][j][3]=1;
if(mpg[b]) f[i][j][4]=1;
}
for(int len=3;len<lens;len++){
for(int i=1;i+len-1<lens;i++)
{
int j=i+len-1;
for(int k=i;k<j;k++)
{
if(f[i][k][1]&&f[k+1][j][1])
{
//cout<<2<<endl;
if(mpw["WW"]) f[i][j][1]=1;
if(mpi["WW"]) f[i][j][2]=1;
if(mpn["WW"]) f[i][j][3]=1;
if(mpg["WW"]) f[i][j][4]=1;
}
if(f[i][k][2]&&f[k+1][j][2])
{
if(mpw["II"]) f[i][j][1]=1;
if(mpi["II"]) f[i][j][2]=1;
if(mpn["II"]) f[i][j][3]=1;
if(mpg["II"]) f[i][j][4]=1;
}
if(f[i][k][3]&&f[k+1][j][3])
{
if(mpw["NN"]) f[i][j][1]=1;
if(mpi["NN"]) f[i][j][2]=1;
if(mpn["NN"]) f[i][j][3]=1;
if(mpg["NN"]) f[i][j][4]=1;
}
if(f[i][k][4]&&f[k+1][j][4])
{
if(mpw["GG"]) f[i][j][1]=1;
if(mpi["GG"]) f[i][j][2]=1;
if(mpn["GG"]) f[i][j][3]=1;
if(mpg["GG"]) f[i][j][4]=1;
}
}
}
}
lens--;
bool flag=0;
if(f[1][lens][1])
{
cout<<"W";
flag=1;
}
if(f[1][lens][2])
{
cout<<"I";
flag=1;
}
if(f[1][lens][3])
{
cout<<"N";
flag=1;
}
if(f[1][lens][4])
{
cout<<"G";
flag=1;
}
if(!flag) cout<<"The name is wrong!"<<endl;
return 0;
}