#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && (c != '-')) c = getchar();
  if (c == '-') f = -1, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
inline void GG() {
  puts("NO");
  exit(0);
}
const int N = 2e5 + 10, M = 2e6 + 10;
const long long inf = 1e18;
int n, l;
int cnt1, cnt2;
struct node {
  long long t, k, b;
} v1[N], v2[N];
bool flag[2];
inline vector<int> solve(node *a, int m) {
  sort(a + 1, a + m + 1, [=](node a, node b) { return a.t < b.t; });
  flag[0] = flag[1] = 0;
  long long l = -inf, r = inf;
  auto Div1 = [&](long long a, long long b) {
    if (a >= 0) return a / b;
    return -(-a - 1) / b - 1;
  };
  auto Div2 = [&](long long a, long long b) {
    if (a <= 0) return a / b;
    return (a - 1) / b + 1;
  };
  for (register int i = (2); i <= (m); i++) {
    long long dt = a[i].t - a[i - 1].t, db = a[i].b - a[i - 1].b,
              dk = a[i].k - a[i - 1].k, L = -dt - db, R = dt - db;
    if (dk & 1)
      flag[(R & 1) ^ 1] = 1;
    else if (R & 1)
      GG();
    if (!dk) {
      if (L > R) GG();
    } else if (dk < 0) {
      r = min(r, Div1(-L, -dk)), l = max(l, Div2(-R, -dk));
    } else {
      r = min(r, Div1(R, dk)), l = max(l, Div2(L, dk));
    }
  }
  if (flag[l & 1]) l++;
  if (flag[l & 1] || l > r) GG();
  vector<int> ans(::l + 1);
  ans[0] = 1;
  for (register int i = (1); i < (m); i++) {
    long long t = (a[i + 1].b + a[i + 1].k * l) - (a[i].b + a[i].k * l);
    if (t > 0) {
      int j = a[i].t + 1;
      while (t > 0) ans[j] = 1, --t, ++j;
      while (j <= a[i + 1].t) ans[j] = -ans[j - 1], ++j;
    } else {
      int j = a[i].t + 1;
      while (t < 0) ans[j] = -1, ++t, ++j;
      while (j <= a[i + 1].t) ans[j] = -ans[j - 1], ++j;
    }
  }
  return ans;
}
int main() {
  n = read(), l = read();
  for (register int i = (1); i <= (n); i++) {
    long long t = read(), x = read(), y = read();
    v1[++cnt1] = (node){t % l, -t / l, x - y};
    v2[++cnt2] = (node){t % l, -t / l, x + y};
  }
  v1[++cnt1] = (node){0, 0, 0}, v1[++cnt1] = (node){l, 1, 0};
  v2[++cnt2] = (node){0, 0, 0}, v2[++cnt2] = (node){l, 1, 0};
  auto ansx = solve(v1, cnt1), ansy = solve(v2, cnt2);
  for (register int i = (1); i <= (l); i++) {
    if (ansx[i] == -1 && ansy[i] == -1) putchar('L');
    if (ansx[i] == 1 && ansy[i] == 1) putchar('R');
    if (ansx[i] == -1 && ansy[i] == 1) putchar('U');
    if (ansx[i] == 1 && ansy[i] == -1) putchar('D');
  }
}
