#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
struct node {
  long long a, b, c, add;
  int id;
};
long long f[maxn][maxn][maxn];
int pos[maxn][maxn][maxn];
int t[maxn][maxn][maxn];
int outId[maxn];
long long outNum[maxn];
node g[maxn];
int n, m, K;
bool cmp(const node &x, const node &y) { return x.c < y.c; }
void find(int i, int j, int k) {
  if (j <= 0) return;
  find(pos[i][j][k], j - 1, t[i][j][k]);
  cout << g[i].id << " " << k + g[i].a << endl;
}
int main() {
  long long i, j, k, p;
  while (scanf("%d%d%d", &n, &m, &K) != EOF) {
    for (i = 1; i <= m; i++) {
      scanf("%I64d%I64d%I64d", &g[i].a, &g[i].b, &g[i].c);
      g[i].add = g[i].b - g[i].a;
      g[i].id = i;
    }
    sort(g + 1, g + m + 1, cmp);
    for (i = 1; i <= m; i++)
      for (j = 1; j <= n; j++)
        for (k = 0; k <= 100; k++) f[i][j][k] = -1;
    for (i = 1; i <= m; i++)
      for (j = 0; j <= g[i].add; j++) {
        f[i][1][j] = j + g[i].a;
      }
    memset(pos, -1, sizeof(pos));
    for (j = 2; j <= n; j++)
      for (i = j; i <= m; i++) {
        for (k = 0; k <= g[i].add; k++) {
          for (p = j - 1; p <= i - 1; p++) {
            if (g[p].c == g[i].c) continue;
            long long pre = k + g[i].a - K;
            if (pre >= g[p].a && pre <= g[p].b &&
                f[p][j - 1][pre - g[p].a] != -1) {
              pre -= g[p].a;
              if (f[p][j - 1][pre] + k + g[i].a > f[i][j][k]) {
                f[i][j][k] = f[p][j - 1][pre] + k + g[i].a;
                pos[i][j][k] = p;
                t[i][j][k] = pre;
              }
            }
            if ((k + g[i].a) % K == 0) {
              pre = (k + g[i].a) / K;
              if (pre >= g[p].a && pre <= g[p].b &&
                  f[p][j - 1][pre - g[p].a] != -1) {
                pre -= g[p].a;
                if (f[p][j - 1][pre] + k + g[i].a > f[i][j][k]) {
                  f[i][j][k] = f[p][j - 1][pre] + k + g[i].a;
                  pos[i][j][k] = p;
                  t[i][j][k] = pre;
                }
              }
            }
          }
        }
      }
    long long Max = 0;
    int Pos, Add;
    for (i = n; i <= m; i++)
      for (j = 0; j <= g[i].add; j++)
        if (f[i][n][j] > Max) {
          Max = f[i][n][j];
          Pos = i;
          Add = j;
        }
    if (Max == 0) {
      printf("NO\n");
      continue;
    }
    printf("YES\n");
    k = 0;
    find(Pos, n, Add);
  }
  return 0;
}
