#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  char ch = getchar();
  int fh = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') fh = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= fh;
}
struct Po {
  long long x, y, t;
} po[200010];
struct shj {
  long long t, x, zh;
} a[200010];
int n, l;
bool an1[2000010], an2[2000010];
bool c1(const shj &a, const shj &b) { return a.t < b.t; }
int main() {
  read(n);
  read(l);
  for (int i = 1; i <= n; i++) {
    read(po[i].t);
    read(po[i].x);
    read(po[i].y);
  }
  for (int i = 1; i <= n; i++) {
    a[i].t = po[i].t % l;
    a[i].x = po[i].x + po[i].y + po[i].t;
    if (a[i].x % 2 == 1 || a[i].x < 0) {
      puts("NO");
      return 0;
    } else
      a[i].x /= 2;
    a[i].zh = po[i].t / l;
  }
  a[n + 1] = (shj){0, 0, 0};
  a[n + 2] = (shj){l, 0, -1};
  sort(a + 1, a + n + 3, c1);
  long long nl = 0, nr = l;
  for (int i = 1; i <= n + 1; i++) {
    long long x = a[i + 1].t - a[i].t, y = a[i + 1].zh - a[i].zh,
              z = a[i + 1].x - a[i].x;
    if (y > 0) {
      if ((z - x) % y == 0)
        nl = max(nl, (z - x) / y);
      else
        nl = max(nl, (z - x) / y + 1);
      nr = min(nr, z / y);
    }
    if (y < 0) {
      z = -z;
      y = -y;
      if (z % y == 0)
        nl = max(nl, z / y);
      else
        nl = max(nl, z / y + 1);
      nr = min(nr, (z + x) / y);
    }
  }
  if (nl > nr) {
    puts("NO");
    return 0;
  }
  for (int i = 1; i <= n + 1; i++) {
    long long su = a[i + 1].x - a[i].x - (a[i + 1].zh - a[i].zh) * nl;
    for (int j = a[i].t + 1; j <= a[i + 1].t; j++)
      if (su) {
        an1[j] = 1;
        su--;
      } else
        an1[j] = 0;
  }
  for (int i = 1; i <= n; i++) {
    a[i].t = po[i].t % l;
    a[i].x = po[i].y - po[i].x + po[i].t;
    if (a[i].x % 2 == 1 || a[i].x < 0) {
      puts("NO");
      return 0;
    } else
      a[i].x /= 2;
    a[i].zh = po[i].t / l;
  }
  a[n + 1] = (shj){0, 0, 0};
  a[n + 2] = (shj){l, 0, -1};
  sort(a + 1, a + n + 3, c1);
  nl = 0, nr = l;
  for (int i = 1; i <= n + 1; i++) {
    long long x = a[i + 1].t - a[i].t, y = a[i + 1].zh - a[i].zh,
              z = a[i + 1].x - a[i].x;
    if (y > 0) {
      if ((z - x) % y == 0)
        nl = max(nl, (z - x) / y);
      else
        nl = max(nl, (z - x) / y + 1);
      nr = min(nr, z / y);
    }
    if (y < 0) {
      z = -z;
      y = -y;
      if (z % y == 0)
        nl = max(nl, z / y);
      else
        nl = max(nl, z / y + 1);
      nr = min(nr, (z + x) / y);
    }
  }
  if (nl > nr) {
    puts("NO");
    return 0;
  }
  for (int i = 1; i <= n + 1; i++) {
    long long su = a[i + 1].x - a[i].x - (a[i + 1].zh - a[i].zh) * nl;
    for (int j = a[i].t + 1; j <= a[i + 1].t; j++) {
      if (su) {
        an2[j] = 1;
        su--;
      } else
        an2[j] = 0;
    }
  }
  for (int i = 1; i <= l; i++) printf("%c", "DLRU"[2 * an1[i] + an2[i]]);
  puts("");
  return 0;
}
