#include <bits/stdc++.h>
using namespace std;
int n, sx, sy;
int t1, t2;
int g[505][505];
bool vis[505][505];
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int dx[4] = {0, 0, 1, -1};
int dy[4] = {-1, 1, 0, 0};
char dir1[4] = {'L', 'R', 'D', 'U'};
char dir2[4] = {'R', 'L', 'U', 'D'};
char path[1000010];
bool deal(int x, int y) {
  if (x < 1 || x > n || y < 1 || y > n) return true;
  return false;
}
bool ok(int xx, int yy, int i) {
  while (1) {
    if (deal(xx, yy) || vis[xx][yy]) return false;
    if (g[xx][yy] == 1) return true;
    xx += dx[i];
    yy += dy[i];
  }
}
void dfs(int x, int y) {
  if (g[x][y] == 0) {
    g[x][y] = 1;
    path[t1++] = '1';
    t2++;
  }
  vis[x][y] = true;
  for (int i = 0; i < 4; i++) {
    int x1 = x + dx[i];
    int y1 = y + dy[i];
    if ((deal(x1, y1)) || vis[x1][y1] || (!ok(x1, y1, i))) continue;
    path[t1++] = dir1[i];
    dfs(x1, y1);
    path[t1++] = dir2[i];
  }
  path[t1++] = '2';
  t2--;
}
int main() {
  while (scanf("%d%d%d", &n, &sx, &sy) != EOF) {
    t2 = 0;
    t1 = 0;
    memset(vis, false, sizeof(vis));
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        scanf("%d", &g[i][j]);
        t2 += g[i][j];
      }
    }
    dfs(sx, sy);
    if (t2 == 0) {
      printf("YES\n");
      printf("%s\n", path);
    } else
      printf("NO\n");
  }
  return 0;
}
