#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
int n, L;
long long P[N];
struct data {
  long long t, x, y, k, r, v;
  bool operator<(const data &p) const { return r < p.r; }
} A[N];
template <typename T>
inline T read() {
  T x = 0;
  int f = 0, ch = getchar();
  while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f ? -x : x;
}
inline void fail() {
  puts("NO");
  exit(0);
}
long long solve(const int type) {
  for (int i = 1; i <= n; i++) A[i].v = type == 0 ? A[i].x : A[i].y;
  long long vl = -INF, vr = INF;
  for (int i = 1; i < n; i++) {
    long long k = A[i + 1].k - A[i].k, r = A[i + 1].r - A[i].r,
              v = A[i + 1].v - A[i].v;
    pair<long long, long long> p;
    if (k > 0)
      p = pair<long long, long long>(ceil((long double)(v - r) / k),
                                     floor((long double)v / k));
    else if (k < 0)
      p = pair<long long, long long>(ceil((long double)v / k),
                                     floor((long double)(v - r) / k));
    else if (v - r <= 0 && 0 <= v)
      p = pair<long long, long long>(-INF, INF);
    else
      fail();
    vl = max(vl, p.first);
    vr = min(vr, p.second);
  }
  if (vl > vr) fail();
  return vl;
}
void print(const long long dx, const long long dy) {
  for (int i = 1; i <= n; i++) {
    A[i].x -= A[i].k * dx;
    A[i].y -= A[i].k * dy;
  }
  for (int i = 1; i < n; i++) {
    long long r = A[i + 1].r - A[i].r, tx = A[i + 1].x - A[i].x,
              ty = A[i + 1].y - A[i].y, x = 0, y = 0;
    while (r--) {
      if (x < tx) {
        x++;
        if (y < ty)
          putchar('U'), y++;
        else
          putchar('R');
      } else {
        if (y < ty)
          putchar('L'), y++;
        else
          putchar('D');
      }
    }
  }
}
int main() {
  n = read<int>(), L = read<int>();
  for (int i = 1; i <= n; i++) {
    A[i].t = read<long long>(), A[i].x = read<long long>(),
    A[i].y = read<long long>();
    A[i].k = A[i].t / L;
    A[i].r = A[i].t % L;
  }
  for (int i = 0; i < n; i++) {
    long long d = abs(A[i + 1].x - A[i].x) + abs(A[i + 1].y - A[i].y),
              t = A[i + 1].t - A[i].t;
    if (t < d || (t & 1) != (d & 1)) fail();
  }
  A[++n] = {0, 0, 0, 0, 0, 0};
  A[++n] = {0, 0, 0, -1, L, 0};
  for (int i = 1; i <= n; i++) {
    long long x = A[i].x, y = A[i].y;
    A[i].x = (x + y + A[i].t) >> 1;
    A[i].y = (y - x + A[i].t) >> 1;
  }
  sort(A + 1, A + 1 + n);
  print(solve(0), solve(1));
  return 0;
}
