#include <bits/stdc++.h>
using namespace std;
long long x, y;
int fun(int i, int j) {
  if (x < i and y < j) return 1;
  if (x > i and y < j) return 2;
  if (x > i and y > j) return 3;
  if (x < i and y > j) return 4;
  return 0;
}
int gun(int i, int j) {
  if (x == i and y < j) return 1;
  if (x < i and y == j) return 2;
  if (x == i and y > j) return 3;
  if (x > i and y == j) return 4;
  return 0;
}
struct point {
  long long i, j;
  char type;
};
vector<point> v;
long long H[10], D[10];
int main(int argc, char const *argv[]) {
  int n;
  scanf("%d", &n);
  scanf("%lld %lld", &x, &y);
  for (int i = 0; i < 10; i++) {
    H[i] = D[i] = 1e16;
  }
  for (int i = 0; i < n; i++) {
    point p;
    scanf(" %c %lld %lld", &p.type, &p.i, &p.j);
    v.push_back(p);
    if (p.type == 'R') {
      if (abs(x - p.i) == abs(y - p.j)) {
        D[fun(p.i, p.j)] = min(D[fun(p.i, p.j)], abs(x - p.i) + abs(y - p.j));
      }
    }
    if (p.type == 'B') {
      if (x == p.i or y == p.j) {
        H[gun(p.i, p.j)] = min(H[gun(p.i, p.j)], abs(x - p.i) + abs(y - p.j));
      }
    }
  }
  for (int i = 0; i < n; i++) {
    point p = v[i];
    if (p.type == 'R') continue;
    if (abs(x - p.i) == abs(y - p.j)) {
      long long dis = abs(x - p.i) * 2;
      if (D[fun(p.i, p.j)] > dis) {
        printf("YES\n");
        exit(0);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    point p = v[i];
    if (p.type == 'B') continue;
    if (x == p.i or y == p.j) {
      long long dis = abs(x - p.i) + abs(y - p.j);
      if (H[gun(p.i, p.j)] > dis) {
        printf("YES\n");
        exit(0);
      }
    }
  }
  printf("NO\n");
  return 0;
}
