#include <bits/stdc++.h>
using namespace std;
template <class X>
void printa(X a, int n) {
  for (int i = 0, _n = (n); i < _n; i++) cerr << a[i] << " ";
  cerr << endl;
}
template <class X>
void printv(X v) {
  for (typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
    cerr << *it << " ";
  cerr << endl;
}
const long long MAXN = 120;
long long n, m, k;
long long d[MAXN][MAXN][MAXN];
long long mark[MAXN][MAXN][MAXN];
pair<long long, long long> parent[MAXN][MAXN][MAXN];
pair<long long, long long> ans[MAXN];
struct sub {
  long long c, a, b, i;
  sub() { ; }
  friend istream &operator>>(istream &cin, sub &x) {
    cin >> x.a >> x.b >> x.c;
    return cin;
  }
  bool operator<(const sub &x) const { return c < x.c; }
} subj[MAXN];
void input() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0, _n = (m); i < _n; i++) {
    cin >> subj[i];
    subj[i].i = i;
  }
  sort(subj, subj + m);
}
long long memz(long long i, long long j, long long t) {
  if (mark[i][j][t]) return d[i][j][t];
  long long q = subj[i].a + t;
  mark[i][j][t] = 1;
  if (q > subj[i].b || i < j) {
    d[i][j][t] = -1 * (long long)1e17;
    return -1 * (long long)1e17;
  }
  if (j == 0) {
    d[i][j][t] = q;
    return q;
  }
  long long p1 = q;
  long long p2 = q - k;
  bool tt = true;
  for (int z = (i)-1; z >= 0; z--)
    if (subj[z].c < subj[i].c && z >= j - 1) {
      if (p2 >= subj[z].a && p2 <= subj[z].b &&
          d[i][j][t] < memz(z, j - 1, p2 - subj[z].a) + q) {
        d[i][j][t] = memz(z, j - 1, p2 - subj[z].a) + q;
        parent[i][j][t].first = z;
        parent[i][j][t].second = p2 - subj[z].a;
        tt = false;
      }
      if ((p1 / k) >= subj[z].a && (p1 / k) <= subj[z].b && !(p1 % k) &&
          d[i][j][t] < memz(z, j - 1, (p1 / k) - subj[z].a) + q) {
        d[i][j][t] = memz(z, j - 1, (p1 / k) - subj[z].a) + q;
        parent[i][j][t].first = z;
        parent[i][j][t].second = p1 / k - subj[z].a;
        tt = false;
      }
    }
  if (tt) {
    d[i][j][t] = -1 * (long long)1e17;
    return d[i][j][t];
  }
  return d[i][j][t];
}
int main() {
  input();
  long long MAX = 0;
  long long s = -1;
  long long s2, s3;
  memset(parent, -1, sizeof parent);
  for (int i = 0, _n = (m); i < _n; i++)
    for (int j = 0, _n = (101); j < _n; j++)
      if (memz(i, n - 1, j) > MAX) {
        MAX = memz(i, n - 1, j);
        s = i;
        s2 = n - 1;
        s3 = j;
      }
  if (MAX == 0) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  int sum = 0;
  while (s != -1) {
    ans[sum] = pair<long long, long long>(subj[s].i + 1, s3 + subj[s].a);
    ++sum;
    long long p = s;
    s = parent[s][s2][s3].first;
    s3 = parent[p][s2][s3].second;
    s2--;
  }
  for (int i = (sum)-1; i >= 0; i--)
    cout << ans[i].first << " " << ans[i].second << endl;
  return 0;
}
