#include <bits/stdc++.h>
typedef struct path_info_st {
  int m;
  long long ht;
} path_info_st, *path_info_t;
long long A[51], B[51];
int C[51], L[51];
long long dp[51][51][101];
long long help1[51][101];
long long help2[51][101];
path_info_st path_data[51][51][101];
path_info_t path[51];
int N, M, K;
int main() {
  long long i, j, k, r, p, q, t, t1, t2, t3, t4, t5, t6;
  scanf("%d %d %d", &N, &M, &K);
  for (i = 0; i < M; i++) scanf("%I64d %I64d %d", &(A[i]), &(B[i]), &(C[i]));
  for (i = 0; i < M; i++) L[i] = (int)(B[i] - A[i]);
  for (i = 0; i < M; i++) {
    t = L[i];
    t1 = A[i];
    for (j = 0; j <= t; j++) {
      t2 = t1 + j;
      help1[i][j] = t2 / K;
    }
    for (j = 0; j <= t; j++) {
      t2 = t1 + j;
      help2[i][j] = t2 - K;
    }
  }
  for (i = 0; i < M; i++) {
    t1 = A[i];
    t = L[i];
    for (j = 0; j <= t; j++) {
      dp[0][i][j] = t1 + j;
      path_data[0][i][j].m = -1;
      path_data[0][i][j].ht = -1;
    }
  }
  bool can_set_to_this_day;
  for (i = 1; i < N; i++) {
    for (j = 0; j < M; j++) {
      t = L[j];
      t1 = A[j];
      for (r = 0; r <= t; r++) {
        t2 = t1 + r;
        p = help1[j][r];
        q = help2[j][r];
        for (k = 0; k < M; k++) {
          t3 = A[k];
          t4 = B[k];
          if (C[k] < C[j]) {
            if (p >= t3 && p <= t4 && (t2 % K) == 0) {
              t5 = dp[i][j][r];
              t6 = dp[i - 1][k][p - t3];
              if (t6 > 0 && (0 == t5 || t5 < t2 + t6)) {
                dp[i][j][r] = t2 + t6;
                path_data[i][j][r].m = k;
                path_data[i][j][r].ht = p - t3;
              }
            }
            if (q >= t3 && q <= t4) {
              t5 = dp[i][j][r];
              t6 = dp[i - 1][k][q - t3];
              if (t6 > 0 && (0 == t5 || t5 < t2 + t6)) {
                dp[i][j][r] = t2 + t6;
                path_data[i][j][r].m = k;
                path_data[i][j][r].ht = q - t3;
              }
            }
          }
        }
      }
    }
  }
  k = 0;
  for (i = 0; i < M; i++) {
    t = L[i];
    for (j = 0; j <= t; j++) {
      t2 = dp[N - 1][i][j];
      if (k < t2) {
        k = t2;
        t3 = i;
        t4 = j;
      }
    }
  }
  if (0 == k) {
    printf("NO\n");
    return 0;
  }
  k = 0, i = 1;
  printf("YES\n");
  if (N > 1) {
    path_info_t pi = &(path_data[N - 1][t3][t4]);
    for (i = 1; i < N - 1; i++) {
      path[k++] = pi;
      pi = &(path_data[N - i - 1][pi->m][pi->ht]);
    }
    path[k++] = pi;
    for (i = k - 1; i >= 0; i--)
      printf("%d %I64d\n", (int)(path[i]->m + 1),
             (path[i]->ht + A[path[i]->m]));
  }
  printf("%d %I64d\n", (int)(t3 + 1), (t4 + A[t3]));
  return 0;
}
