#include <bits/stdc++.h>
int H[512][512];
bool mark[512][512] = {};
bool go[512][512][4] = {};
int dx[4] = {0, 1, 0, -1};
int dy[4] = {-1, 0, 1, 0};
char buf[3000000];
char *o = buf;
char const *dc = "URDL";
struct pos {
  pos() : x(0), y(0) {}
  pos(int _x, int _y) : x(_x), y(_y) {}
  int x, y;
};
void rec(int x, int y) {
  if (!H[y][x]) *o++ = '1';
  for (int d = 0; d < 4; ++d)
    if (go[y][x][d]) {
      *o++ = dc[d];
      rec(x + dx[d], y + dy[d]);
      *o++ = dc[(d + 2) % 4];
    }
  *o++ = '2';
}
int main() {
  int N, x0, y0;
  scanf("%d%d%d", &N, &y0, &x0);
  for (int y = 1; y <= N; ++y)
    for (int x = 1; x <= N; ++x) scanf("%d", &H[y][x]);
  std::queue<pos> q;
  q.push(pos(x0, y0));
  while (!q.empty()) {
    pos p = q.front();
    q.pop();
    mark[p.y][p.x] = 1;
    for (int d = 0; d < 4; ++d) {
      int last = 0;
      for (int i = 1;; ++i) {
        int x = p.x + dx[d] * i;
        int y = p.y + dy[d] * i;
        if (1 <= x && x <= N && 1 <= y && y <= N && !mark[y][x]) {
          if (H[y][x]) last = i;
        } else
          break;
      }
      pos u = p;
      for (int i = 1; i <= last; ++i) {
        pos v = u;
        v.x += dx[d];
        v.y += dy[d];
        mark[v.y][v.x] = 1;
        go[u.y][u.x][d] = 1;
        q.push(v);
        u = v;
      }
    }
  }
  bool ok = 1;
  for (int y = 1; ok && y <= N; ++y)
    for (int x = 1; ok && x <= N; ++x)
      if (H[y][x] && !mark[y][x]) ok = 0;
  if (ok) {
    printf("YES\n");
    rec(x0, y0);
    *o++ = 0;
    printf("%s\n", buf);
  } else
    printf("NO\n");
}
