#include <bits/stdc++.h>
using namespace std;
template <typename T>
using V = vector<T>;
const long long int mod = 1000000007;
struct sb {
  size_t c, ind;
  unsigned long long int a, b;
};
bool cmp(sb a, sb b) { return a.c < b.c; }
struct s {
  unsigned long long int sub;
  size_t lastsub;
  int before;
  bool can;
} DP[51][101][51];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  size_t N, M;
  unsigned long long int K;
  cin >> N >> M >> K;
  V<sb> subs(M);
  for (__typeof(M) i = (0) - ((0) > (M)); i != (M) - ((0) > (M));
       i += ((0) > (M) ? -1 : 1))
    cin >> subs[i].a >> subs[i].b >> subs[i].c, subs[i].ind = i;
  sort((subs).begin(), (subs).end(), cmp);
  pair<size_t, unsigned long long int> ans;
  for (__typeof(M) i = (0) - ((0) > (M)); i != (M) - ((0) > (M));
       i += ((0) > (M) ? -1 : 1)) {
    for (__typeof(subs[i].b + 1) j =
             (subs[i].a) - ((subs[i].a) > (subs[i].b + 1));
         j != (subs[i].b + 1) - ((subs[i].a) > (subs[i].b + 1));
         j += ((subs[i].a) > (subs[i].b + 1) ? -1 : 1)) {
      size_t l = j - subs[i].a;
      DP[i][l][1].sub = j;
      DP[i][l][1].lastsub = 0;
      DP[i][l][1].before = -1;
      DP[i][l][1].can = true;
      for (__typeof(N + 1) k = (2) - ((2) > (N + 1));
           k != (N + 1) - ((2) > (N + 1)); k += ((2) > (N + 1) ? -1 : 1)) {
        DP[i][l][k].sub = 0;
        DP[i][l][k].lastsub = 0;
        DP[i][l][k].before = -1;
        DP[i][l][k].can = false;
        for (__typeof(0) z = (i) - ((i) > (0)); z != (0) - ((i) > (0));
             z += ((i) > (0) ? -1 : 1)) {
          if (subs[z].c == subs[i].c) continue;
          if (j % K == 0 && j / K >= subs[z].a &&
              (j / K - subs[z].a) <= subs[z].b - subs[z].a) {
            if (DP[z][j / K - subs[z].a][k - 1].can &&
                DP[z][j / K - subs[z].a][k - 1].sub + j >= DP[i][l][k].sub) {
              DP[i][l][k].sub = DP[z][j / K - subs[z].a][k - 1].sub + j;
              DP[i][l][k].lastsub = j / K - subs[z].a;
              DP[i][l][k].can = true;
              DP[i][l][k].before = z;
            }
          }
          if (j >= K + subs[z].a &&
              (j - K - subs[z].a) <= subs[z].b - subs[z].a) {
            if (DP[z][j - K - subs[z].a][k - 1].can &&
                DP[z][j - K - subs[z].a][k - 1].sub + j >= DP[i][l][k].sub) {
              DP[i][l][k].sub = DP[z][j - K - subs[z].a][k - 1].sub + j;
              DP[i][l][k].lastsub = j - K - subs[z].a;
              DP[i][l][k].can = true;
              DP[i][l][k].before = z;
            }
          }
        }
      }
      if (DP[i][l][N].can &&
          DP[i][l][N].sub >= DP[ans.first][ans.second][N].sub)
        ans = {i, l};
    }
  }
  if (!DP[ans.first][ans.second][N].can) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  V<pair<size_t, unsigned long long int> > res;
  for (__typeof(1) i = (N + 1) - ((N + 1) > (1)); i != (1) - ((N + 1) > (1));
       i += ((N + 1) > (1) ? -1 : 1)) {
    res.push_back({subs[ans.first].ind + 1, subs[ans.first].a + ans.second});
    ans = {DP[ans.first][ans.second][i].before,
           DP[ans.first][ans.second][i].lastsub};
  }
  for (__typeof(0) i = (N) - ((N) > (0)); i != (0) - ((N) > (0));
       i += ((N) > (0) ? -1 : 1))
    cout << res[i].first << ' ' << res[i].second << endl;
  return 0;
}
