#include
#include
#include
using namespace std;
int i,j,x,y,m,n,p,q,z;
char a[12][12]={0},ch;
int fac(int e ,int f,int p,int q){ //四个参数为两方将的坐标
int cou=0;
if(f==q){ //判断是否被将干掉
for(i=e+1;i<p;i++)
if(a[i][f]!=0)
break;
if(i==p)
return 1;
}
for(i=1;i<=10;i++) //判断是否被车干掉
for(j=1;j<=9;j++){
if(a[i][j]=='R'){
if(i==e&&j!=f){
for(m=min(j,f)+1;m<max(j,f);m++)
if(a[i][m]!=0)
break;
if(m==max(j,f))
return 1;
}
if(j==f&&i!=e){
for(m=min(i,e)+1;m<max(i,e);m++)
if(a[m][j]!=0)
break;
if(m==max(i,e))
return 1;
}
}
if(a[i][j]=='C'){ //判断是否被炮干掉
if(i==e&&j!=f){
for(m=min(j,f)+1;m<max(j,f);m++)
if(a[i][m]!=0)
cou++; //判断炮架
if(cou==1)
return 1;
}
cou=0;
if(j==f&&i!=e){
for(m=min(i,e)+1;m<max(i,e);m++)
if(a[m][j]!=0)
cou++;
if(cou==1)
return 1;
cou=0;
}
}
if(a[i][j]=='H'){ //判断是否被马干掉
if(i==e-2&&j==f+1&&a[e-1][f+1]==0)
return 1;
if(i==e-1&&j==f+2&&a[e-1][f+1]==0)
return 1;
if(i==e+1&&j==f+2&&a[e+1][f+1]==0)
return 1;
if(i==e+2&&j==f+1&&a[e+1][f+1]==0)
return 1;
if(i==e-1&&j==f-2&&a[e-1][f-1]==0)
return 1;
if(i==e-2&&j==f-1&&a[e-1][f-1]==0)
return 1;
if(i==e+1&&j==f-2&&a[i+1][j-1]==0)
return 1;
if(i==e+2&&j==f-1&&a[i+1][f-1]==0)
return 1;
}
}
return 0;
}
int main(){
while(scanf("%d%d%d",&z,&x,&y)&&z,x,y){
for(i=1;i<=11;i++)
for(j=1;j<=11;j++)
a[i][j]=0;
getchar();
int b=0;
for(j=1;j<=z;j++){
scanf("%c%d%d",&ch,&m,&n);
getchar();
a[m][n]=ch;
if(ch=='G'){
p=m;q=n;
}
}
if(y-1>=4){
b=fac(x,y-1,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(y+1<=6){
b=fac(x,y+1,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(x-1>=1){
b= fac(x-1,y,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(x+1<=3){
b= fac(x+1,y,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(b!=0)
printf("YES\n");
}
}