#include <bits/stdc++.h>
using namespace std;
const int Maxn = 2e6 + 10000, Maxl = 2e6 + 10000;
int n, l;
long long t[Maxn], x[Maxn], y[Maxn];
struct triple {
  long long t, a, b;
  triple(long long t = 0, long long a = 0, long long b = 0)
      : t(t), a(a), b(b) {}
  bool operator<(const triple& a) const { return t < a.t; }
};
template <class T>
void uin(T& a, T b) {
  if (a > b) a = b;
}
template <class T>
void uax(T& a, T b) {
  if (a < b) a = b;
}
long long fl(long long x, long long y) {
  if (x >= 0) return x / y;
  return x / y - (x % y ? 1 : 0);
}
long long cl(long long x, long long y) {
  if (x >= 0) return (x + y - 1) / y;
  return x / y;
}
vector<int> work(vector<long long> x) {
  long long i;
  long long lb = 0, rb = l;
  vector<triple> s;
  vector<int> ans;
  for (i = 0; i < n; i++) {
    if ((x[i] + t[i]) % 2) return vector<int>();
    x[i] = (x[i] + t[i]) / 2;
  }
  for (i = 0; i < n; i++) s.push_back(triple(t[i] % l, -(t[i] / l), x[i]));
  s.push_back(triple(0, 0, 0));
  s.push_back(triple(l, 1, 0));
  sort(s.begin(), s.end());
  for (i = 0; i < s.size() - 1; i++) {
    long long a = s[i + 1].a - s[i].a, b = s[i + 1].b - s[i].b,
              d = s[i + 1].t - s[i].t;
    long long left = -b, right = d - b;
    if (!a) {
      if (left > 0 || right < 0) return vector<int>();
    } else {
      if (a < 0) {
        a = -a;
        swap(left, right);
        left = -left;
        right = -right;
      }
      uin(rb, fl(right, a));
      uax(lb, cl(left, a));
    }
  }
  if (lb > rb) return vector<int>();
  int tmp = 0;
  for (i = 0; i < s.size(); i++) {
    while (tmp < s[i].b + lb * s[i].a) ans.push_back(1), ++tmp;
    while (ans.size() < s[i].t) ans.push_back(0);
  }
  return ans;
}
int main(int argc, const char* argv[]) {
  ios::sync_with_stdio(0);
  int i;
  cin >> n >> l;
  for (i = 0; i < n; i++) cin >> t[i] >> x[i] >> y[i];
  vector<long long> x1(Maxn), x2(Maxn);
  for (i = 0; i < n; i++) {
    x1[i] = x[i] + y[i];
    x2[i] = x[i] - y[i];
  }
  vector<int> ans1 = work(x1);
  vector<int> ans2 = work(x2);
  char ans[Maxl];
  if (ans1.empty() || ans2.empty()) {
    cout << "NO" << endl;
    return 0;
  }
  for (i = 0; i < l; i++) {
    if (ans1[i] == 1 && ans2[i] == 1) ans[i] = 'R';
    if (ans1[i] == 1 && ans2[i] == 0) ans[i] = 'U';
    if (ans1[i] == 0 && ans2[i] == 1) ans[i] = 'D';
    if (ans1[i] == 0 && ans2[i] == 0) ans[i] = 'L';
  }
  for (i = 0; i < l; i++) cout << ans[i];
  cout << endl;
  return 0;
}
