#include <bits/stdc++.h>
using namespace std;
const int N = 200005, M = N << 3;
int n, L, l, r, rt, tot, cnt, ss;
long long p[N], q[N], X, Y, lx, rx, ly, ry, a[M];
map<long long, int> Id;
set<long long> t;
struct Data {
  long long t, x, y;
  int ti;
} A[N];
bool operator<(Data a, Data b) { return a.ti < b.ti; }
struct Mat {
  long long x, ly, ry;
  bool typ;
} B[N << 1];
bool operator<(Mat a, Mat b) {
  return a.x < b.x || a.x == b.x && a.typ < b.typ;
}
void Output() {
  if (abs(X) + abs(Y) > L) return;
  for (int i = 1; i <= n; i++) {
    p[i] = A[i].x - (A[i].t / L) * X;
    q[i] = A[i].y - (A[i].t / L) * Y;
  }
  if (abs(p[1]) + abs(q[1]) > A[1].ti) return;
  for (int i = 2; i <= n; i++)
    if (abs(p[i] - p[i - 1]) + abs(q[i] - q[i - 1]) > A[i].ti - A[i - 1].ti)
      return;
  if (abs(X - p[n]) + abs(Y - q[n]) > L - A[n].ti) return;
  int x = 0, y = 0;
  p[n + 1] = X;
  q[n + 1] = Y;
  A[n + 1].ti = L;
  for (int i = 1; i <= n + 1; i++) {
    int res = A[i].ti - A[i - 1].ti;
    if (x < p[i]) {
      for (; x < p[i]; x++, res--) putchar('R');
    } else {
      for (; x > p[i]; x--, res--) putchar('L');
    }
    if (y < q[i]) {
      for (; y < q[i]; y++, res--) putchar('U');
    } else {
      for (; y > q[i]; y--, res--) putchar('D');
    }
    for (; res > 0; res -= 2) {
      putchar('R');
      putchar('L');
    }
  }
  exit(0);
}
int main() {
  scanf("%d%d", &n, &L);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d%I64d%I64d", &A[i].t, &A[i].x, &A[i].y);
    A[i].ti = A[i].t % L;
    if (((A[i].x + A[i].y) & 1) != (A[i].t & 1)) {
      printf("NO\n");
      return 0;
    }
  }
  sort(A + 1, A + n + 1);
  for (int i = 1; i <= n; i++) a[i] = A[i].t / L;
  if (a[1]) {
    cnt++;
    lx = (A[1].x + A[1].ti) / a[1];
    rx = (A[1].x - A[1].ti) / a[1];
    if (lx > rx) swap(lx, rx);
    ly = (A[1].y + A[1].ti) / a[1];
    ry = (A[1].y - A[1].ti) / a[1];
    if (ly > ry) swap(ly, ry);
    B[++tot].x = lx;
    B[tot].ly = ly;
    B[tot].ry = ry;
    B[tot].typ = 0;
    B[++tot].x = rx;
    B[tot].ly = ly;
    B[tot].ry = ry;
    B[tot].typ = 1;
  }
  for (int i = 2; i <= n; i++)
    if (a[i] != a[i - 1]) {
      cnt++;
      int t = A[i].ti - A[i - 1].ti;
      lx = (A[i - 1].x - A[i].x + t) / (a[i - 1] - a[i]);
      rx = (A[i - 1].x - A[i].x - t) / (a[i - 1] - a[i]);
      if (lx > rx) swap(lx, rx);
      ly = (A[i - 1].y - A[i].y + t) / (a[i - 1] - a[i]);
      ry = (A[i - 1].y - A[i].y - t) / (a[i - 1] - a[i]);
      if (ly > ry) swap(ly, ry);
      B[++tot].x = lx;
      B[tot].ly = ly;
      B[tot].ry = ry;
      B[tot].typ = 0;
      B[++tot].x = rx;
      B[tot].ly = ly;
      B[tot].ry = ry;
      B[tot].typ = 1;
    }
  if (a[n] != -1) {
    cnt++;
    int t = L - A[n].ti;
    lx = (A[n].x - t) / (a[n] + 1);
    rx = (A[n].x + t) / (a[n] + 1);
    if (lx > rx) swap(lx, rx);
    ly = (A[n].y - t) / (a[n] + 1);
    ry = (A[n].y + t) / (a[n] + 1);
    if (ly > ry) swap(ly, ry);
    B[++tot].x = lx;
    B[tot].ly = ly;
    B[tot].ry = ry;
    B[tot].typ = 0;
    B[++tot].x = rx;
    B[tot].ly = ly;
    B[tot].ry = ry;
    B[tot].typ = 1;
  }
  sort(B + 1, B + tot + 1);
  int sb = 0;
  for (l = 1; l <= tot; l++) {
    sb += (B[l].typ == 0) ? 1 : -1;
    if (sb == cnt) break;
  }
  if (l <= tot) {
    X = B[l].x + B[l + 1].x >> 1;
    Y = (B[l].ly + B[l].ry >> 1) - (X - B[l].x);
    if (((X + Y) & 1) != (L & 1)) Y++;
    Output();
    Y = (B[l].ly + B[l].ry >> 1) + (X - B[l].x);
    if (((X + Y) & 1) != (L & 1)) Y--;
    Output();
    X = B[l].x;
    Y = B[l].ly + B[l].ry >> 1;
    if (((X + Y) & 1) != (L & 1)) X++;
    Output();
    X = B[l - 1].x;
    Y = B[l].ly + B[l].ry >> 1;
    if (((X + Y) & 1) != (L & 1)) X--;
    Output();
  }
  printf("NO\n");
  return 0;
}
