#include <bits/stdc++.h>
using namespace std;
int n, l;
struct Node {
  long long x, y, p, q;
  inline char operator<(Node a) const { return q < a.q; }
} p[500001];
inline long long floor(long long x, long long y) {
  if (y < 0) x = -x, y = -y;
  return (x >= 0) ? x / y : x / y - (x % y ? 1 : 0);
}
inline long long ceil(long long x, long long y) {
  if (y < 0) x = -x, y = -y;
  return (x >= 0) ? (x + y - 1) / y : x / y;
}
int main(void) {
  int i, it1, it2;
  long long lx, ly, rx, ry, dx, dy, dp, dq, t, x, y;
  scanf("%d%d", &n, &l);
  for (i = 1; i <= n; ++i) {
    scanf("%lld%lld%lld", &t, &x, &y);
    if ((x + y + t) & 1ll) return puts("NO"), 0;
    p[i].x = (t + x + y) / 2, p[i].y = (t + y - x) / 2, p[i].p = t / l,
    p[i].q = t % l;
  }
  p[++n] = {0, 0, -1, l};
  sort(p + 1, p + n + 1);
  for (lx = 0, rx = 0x3f3f3f3f3f3f3f3fll, ly = 0, ry = 0x3f3f3f3f3f3f3f3fll,
      i = 1;
       i <= n; ++i) {
    dp = p[i].p - p[i - 1].p, dq = p[i].q - p[i - 1].q,
    dx = p[i].x - p[i - 1].x, dy = p[i].y - p[i - 1].y;
    if (!dp) {
      if (dx < 0 || dx - dq > 0 || dy < 0 || dy - dq > 0) return puts("NO"), 0;
    } else if (dp > 0)
      lx = max(lx, ceil((dx - dq), dp)), rx = min(rx, floor(dx, dp)),
      ly = max(ly, ceil((dy - dq), dp)), ry = min(ry, floor(dy, dp));
    else
      lx = max(lx, ceil(dx, dp)), rx = min(rx, floor((dx - dq), dp)),
      ly = max(ly, ceil(dy, dp)), ry = min(ry, floor((dy - dq), dp));
  }
  if (lx > rx || ly > ry) return puts("NO"), 0;
  for (i = 1; i <= n; ++i) {
    it1 = 0, it2 = 0, dq = p[i].q - p[i - 1].q,
    dx = p[i].x - p[i - 1].x - lx * (p[i].p - p[i - 1].p),
    dy = p[i].y - p[i - 1].y - ly * (p[i].p - p[i - 1].p);
    while (dq--) {
      if (it1 < dx) {
        ++it1;
        if (it2 < dy)
          ++it2, putchar('U');
        else
          putchar('R');
      } else {
        if (it2 < dy)
          ++it2, putchar('L');
        else
          putchar('D');
      }
    }
  }
  return 0;
}
