#include <bits/stdc++.h>
struct SJd {
  long long t, z;
  SJd() {}
  SJd(long long T, long long Z) {
    t = T;
    z = Z;
  }
};
int sgn(long long x) {
  if (x > 0)
    return 1;
  else if (x < 0)
    return -1;
  return 0;
}
int cmp(const void* a, const void* b) {
  return sgn(((SJd*)a)->t - ((SJd*)b)->t);
}
bool bk[2000010];
SJd zz[2000010], qd[200010];
struct SFc {
  long long cs, xs;
  int i;
  SFc() {}
  SFc(int I, long long Cs, long long Xs) {
    i = I;
    cs = Cs;
    xs = Xs;
  }
};
int cmp2(const void* a, const void* b) { return ((SFc*)a)->i - ((SFc*)b)->i; }
SFc fc[200010];
long long xw[200010], xz[200010];
bool getans(int ss, int ans[2000010]) {
  for (int i = 0; i < ss - 1; i++) {
    long long cz = xz[i + 1] - xz[i];
    if (cz < 0 || cz > xw[i + 1] - xw[i]) return false;
    for (int j = 1; j <= cz; j++) ans[xw[i] + j] = 1;
  }
  return true;
}
bool solve(int n, int l, SJd sz[200010], int ans[2000010]) {
  qsort(sz, n, sizeof(SJd), cmp);
  for (int i = 0; i < l; i++) bk[i] = false;
  for (int i = 0; i < n; i++) {
    sz[i].z += sz[i].t;
    if (sz[i].z & 1) return false;
    sz[i].z /= 2;
  }
  long long yz;
  bool zd = false;
  bk[0] = true;
  zz[0] = SJd(0, 0);
  for (int i = 0; i < n; i++) {
    int t = sz[i].t % l;
    if (bk[t]) {
      long long z = (sz[i].z - zz[t].z) / ((sz[i].t - zz[t].t) / l);
      if (!zd)
        yz = z, zd = true;
      else if (z != yz)
        return false;
    }
    bk[t] = true;
    zz[t] = sz[i];
  }
  int ss = 0;
  for (int i = 0; i < n; i++)
    fc[ss++] = SFc(sz[i].t % l, sz[i].z, -(sz[i].t / l));
  fc[ss++] = SFc(l, 0, 1);
  fc[ss++] = SFc(0, 0, 0);
  qsort(fc, ss, sizeof(SFc), cmp2);
  long long X;
  if (!zd) {
    long long L = 0, R = l;
    for (int i = 0; i < ss - 1; i++) {
      if (fc[i + 1].xs > fc[i].xs) {
        long long fz = -(fc[i + 1].cs - fc[i].cs);
        if (fz > 0) {
          long long fm = (fc[i + 1].xs - fc[i].xs), ff = (fz + fm - 1) / fm;
          if (ff > L) L = ff;
        }
        fz = (fc[i + 1].i - fc[i].i) - (fc[i + 1].cs - fc[i].cs);
        if (fz >= 0) {
          long long fm = (fc[i + 1].xs - fc[i].xs), ff = fz / fm;
          if (ff < R) R = ff;
        } else
          R = -1;
      } else if (fc[i + 1].xs < fc[i].xs) {
        long long fz = (fc[i + 1].cs - fc[i].cs);
        if (fz >= 0) {
          long long fm = (fc[i].xs - fc[i + 1].xs), ff = fz / fm;
          if (ff < R) R = ff;
        } else
          R = -1;
        fz = -((fc[i + 1].i - fc[i].i) - (fc[i + 1].cs - fc[i].cs));
        if (fz > 0) {
          long long fm = (fc[i].xs - fc[i + 1].xs), ff = (fz + fm - 1) / fm;
          if (ff > L) L = ff;
        }
      }
    }
    if (L > R) return false;
    X = L;
  } else
    X = yz;
  for (int i = 0; i < ss; i++) {
    xw[i] = fc[i].i;
    xz[i] = fc[i].xs * X + fc[i].cs;
  }
  return getans(ss, ans);
}
SJd zx[200010], zy[200010];
int ax[2000010], ay[2000010];
char zf[2][2] = {'L', 'D', 'U', 'R'};
int main() {
  int n, l;
  scanf("%d%d", &n, &l);
  for (int i = 0; i < n; i++) {
    long long t, x, y;
    scanf("%lld%lld%lld", &t, &x, &y);
    zx[i] = SJd(t, x + y);
    zy[i] = SJd(t, x - y);
  }
  if (solve(n, l, zx, ax) && solve(n, l, zy, ay)) {
    for (int i = 1; i <= l; i++) printf("%c", zf[ax[i]][ay[i]]);
  } else
    printf("NO");
  return 0;
}
