#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 100, M = 2000000 + 100;
const long double pi = acos(-1.0);
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while ((ch < '0') || (ch > '9')) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ((ch >= '0') && (ch <= '9')) {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * f;
}
inline long long readll() {
  long long x = 0;
  int f = 1;
  char ch = getchar();
  while ((ch < '0') || (ch > '9')) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ((ch >= '0') && (ch <= '9')) {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * f;
}
struct node {
  long long x, y, t, k, w;
} p[N];
bool cmp(node p, node q) { return p.w < q.w; }
int n, m, dx[M], dy[M];
bool solve(int *op) {
  long long L = 0, R = m;
  for (register int i = 2; i <= n; i++) {
    long long dx = p[i].x - p[i - 1].x, dk = p[i].k - p[i - 1].k,
              dw = p[i].w - p[i - 1].w;
    if (dk == 0) {
      if ((dx - dw > 0) || (dx < 0)) return 0;
    } else if (dk > 0) {
      L = max(L, (long long)ceil((double)(dx - dw) / dk));
      R = min(R, (long long)floor((double)dx / dk));
    } else {
      L = max(L, (long long)ceil((double)dx / dk));
      R = min(R, (long long)floor((double)(dx - dw) / dk));
    }
    if (L > R) return 0;
  }
  int s = L;
  for (register int i = 2; i <= n; i++) {
    long long dx = (p[i].x - p[i].k * s) - (p[i - 1].x - p[i - 1].k * s),
              cnt = p[i].w - p[i - 1].w;
    if ((dx < 0) || (dx > cnt)) return 0;
    for (register int j = 1; j <= cnt; j++)
      if (j <= dx)
        op[j + p[i - 1].w] = 1;
      else
        op[j + p[i - 1].w] = 0;
  }
  return 1;
}
int main() {
  n = read();
  m = read();
  for (register int i = 1; i <= n; i++) {
    p[i].t = readll();
    long long x = readll(), y = readll();
    if ((x + y + p[i].t) & 1) {
      puts("NO");
      return 0;
    }
    p[i].k = p[i].t / m;
    p[i].w = p[i].t % m;
    p[i].x = (y + x + p[i].t) >> 1;
    p[i].y = (y - x + p[i].t) >> 1;
  }
  p[++n] = (node){0, 0, 0, 0, 0};
  p[++n] = (node){0, 0, 0, -1, m};
  sort(p + 1, p + 1 + n, cmp);
  int ok = solve(dx);
  if (!ok) {
    puts("NO");
    return 0;
  }
  for (register int i = 1; i <= n; i++) swap(p[i].x, p[i].y);
  ok = solve(dy);
  if (!ok) {
    puts("NO");
    return 0;
  }
  for (register int i = 1; i <= m; i++) {
    if ((dx[i] == 1) && (dy[i] == 1))
      putchar('U');
    else if ((dx[i] == 0) && (dy[i] == 0))
      putchar('D');
    else if ((dx[i] == 0) && (dy[i] == 1))
      putchar('L');
    else if ((dx[i] == 1) && (dy[i] == 0))
      putchar('R');
  }
  return 0;
}
