#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read(register T& t) {
  register T f = 1;
  register char ch = getchar();
  t = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') t = t * 10 + ch - '0', ch = getchar();
  t *= f;
  return t;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
const long long p = 998244353;
inline long long power(register long long x, register long long k = p - 2) {
  register long long re = 1;
  for (; k; k >>= 1, x = x * x % p)
    if (k & 1) re = re * x % p;
  return re;
}
long long n, m;
struct pot {
  long long x, t, k;
} opt[2][2000005];
bool cmp(pot& a, pot& b) { return a.t < b.t; }
int Ans[2][2000005];
int main() {
  read(n, m);
  for (int i = 1; i <= n; i++) {
    long long t, x, y;
    read(t, x, y);
    if (x + y > t || (t - x - y) % 2 != 0) return printf("NO\n"), 0;
    opt[0][i] = (pot){x + y, t % m, t / m};
    opt[1][i] = (pot){x - y, t % m, t / m};
  }
  opt[0][0] = (pot){0, 0, 0};
  opt[1][0] = (pot){0, 0, 0};
  opt[0][n + 1] = (pot){0, m, -1};
  opt[1][n + 1] = (pot){0, m, -1};
  n++;
  for (int qwq = 0; qwq <= 1; qwq++) {
    sort(opt[qwq] + 1, opt[qwq] + n + 1, cmp);
    pot* pt = opt[qwq];
    int* ans = Ans[qwq];
    long long L = -m, R = m;
    for (int i = 1; i <= n; i++) {
      long long Dk = pt[i - 1].k - pt[i].k;
      long long Dx = pt[i - 1].x - pt[i].x;
      long long Dt = pt[i].t - pt[i - 1].t;
      if (Dk < 0) Dk = -Dk, Dx = -Dx;
      if (Dk == 0) {
        if (abs(Dx) > Dt) return printf("NO\n"), 0;
        continue;
      }
      L = max(L, (long long)ceil(((long double)Dx - Dt) / Dk));
      R = min(R, (long long)floor(((long double)Dx + Dt) / Dk));
      if (L > R) return printf("NO\n"), 0;
    }
    long long x;
    for (x = L; x <= R; x++)
      if ((x + m) % 2 == 0) break;
    if (x > R || (x + m) % 2) return printf("NO\n"), 0;
    for (int i = 1; i <= n; i++) {
      long long d = (pt[i - 1].x - x * pt[i - 1].k) - (pt[i].x - x * pt[i].k);
      for (int j = pt[i - 1].t + 1; j <= pt[i].t; j++)
        if (d < 0)
          ans[j] = 1, d++;
        else
          ans[j] = -1, d--;
      if (d) return printf("NO\n"), 0;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (Ans[0][i] == 1 && Ans[1][i] == -1) printf("U");
    if (Ans[0][i] == -1 && Ans[1][i] == 1) printf("D");
    if (Ans[0][i] == 1 && Ans[1][i] == 1) printf("R");
    if (Ans[0][i] == -1 && Ans[1][i] == -1) printf("L");
  }
  return 0;
}
