#include <bits/stdc++.h>
using namespace std;
struct num {
  long long int a;
  long long int b;
  int c;
  int i;
};
int k;
bool compare(num a, num b) { return a.c < b.c; }
struct no {
  int i;
  int j;
  int diff;
};
num arr[60];
long long int dp[55][55][110];
no y[55][55][110];
vector<pair<int, long long int> > v;
long long int solve(int m, int n, long long int diff) {
  if (dp[m][n][diff] != -2) {
    return dp[m][n][diff];
  }
  if (arr[m].a + diff < arr[m].a || arr[m].a + diff > arr[m].b) {
    return -1;
  }
  if (m < n) {
    return -1;
  }
  if (n == 1) {
    return arr[m].a + diff;
  }
  dp[m][n][diff] = -1;
  for (int i = 1; i < m; i++) {
    if (arr[m].c > arr[i].c) {
      long long int check = arr[m].a + diff - arr[i].a - k;
      long long int aa = arr[m].a + diff;
      long long int check2 = (arr[m].a + diff) / k;
      check2 = check2 - arr[i].a;
      if (check >= 0 && check <= 100)
        dp[i][n - 1][check] = solve(i, n - 1, check);
      if (aa % k == 0 && check2 >= 0 && check2 <= 100)
        dp[i][n - 1][check2] = solve(i, n - 1, check2);
      if (check >= 0 && check <= 100 && dp[i][n - 1][check] != -1)
        dp[m][n][diff] =
            max(dp[i][n - 1][check] + arr[m].a + diff, dp[m][n][diff]);
      if (aa % k == 0 && check2 >= 0 && check2 <= 100 &&
          dp[i][n - 1][check2] != -1) {
        dp[m][n][diff] =
            max(dp[i][n - 1][check2] + arr[m].a + diff, dp[m][n][diff]);
      }
      if (check >= 0 && check <= 100 && dp[i][n - 1][check] != -1 &&
          dp[m][n][diff] == dp[i][n - 1][check] + arr[m].a + diff) {
        y[m][n][diff].i = i;
        y[m][n][diff].j = n - 1;
        y[m][n][diff].diff = check;
      } else if (aa % k == 0 && check2 >= 0 && check2 <= 100 &&
                 dp[i][n - 1][check2] != -1 &&
                 dp[m][n][diff] == dp[i][n - 1][check2] + arr[m].a + diff) {
        y[m][n][diff].i = i;
        y[m][n][diff].j = n - 1;
        y[m][n][diff].diff = check2;
      }
    }
  }
  return dp[m][n][diff];
}
int main() {
  std::ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  int n, m;
  cin >> n >> m >> k;
  for (int i = 1; i <= m; i++) {
    cin >> arr[i].a >> arr[i].b >> arr[i].c;
    arr[i].i = i;
  }
  sort(arr + 1, arr + m + 1, compare);
  for (int i = 0; i <= 50; i++) {
    for (int j = 0; j <= 50; j++) {
      for (int p = 0; p <= 100; p++) {
        dp[i][j][p] = -2;
      }
    }
  }
  long long int ans = -2;
  long long int start = 0;
  int ii;
  for (int i = 1; i <= m; i++) {
    for (long long int j = arr[i].a; j <= arr[i].b; j++) {
      dp[i][n][j - arr[i].a] = solve(i, n, j - arr[i].a);
      ans = max(ans, dp[i][n][j - arr[i].a]);
      if (dp[i][n][j - arr[i].a] == ans) {
        ii = i;
        start = j - arr[i].a;
      }
    }
  }
  if (ans >= 0) {
    cout << "YES" << endl;
    int i = ii, j = n, diff = start;
    int p = i, q = j, d = diff;
    while (i >= 1 && j >= 1 && diff >= 0) {
      p = i;
      q = j;
      d = diff;
      v.push_back(make_pair(arr[i].i, diff + arr[i].a));
      i = y[p][q][d].i;
      j = y[p][q][d].j;
      diff = y[p][q][d].diff;
    }
    for (int i = v.size() - 1; i >= 0; i--) {
      cout << v[i].first << " " << v[i].second << endl;
    }
  } else {
    cout << "NO" << endl;
  }
}
