#include <bits/stdc++.h>
template <typename T>
T inline SQR(const T& a) {
  return a * a;
}
template <typename T>
T inline ABS(const T& a) {
  return a < 0 ? -a : a;
}
template <typename T>
T inline MIN(const T& a, const T& b) {
  if (a < b) return a;
  return b;
}
template <typename T>
T inline MAX(const T& a, const T& b) {
  if (a > b) return a;
  return b;
}
const double EPS = 1e-9;
inline int SGN(double a) {
  return ((a > EPS) ? (1) : ((a < -EPS) ? (-1) : (0)));
}
inline int CMP(double a, double b) { return SGN(a - b); }
using namespace std;
struct subject_t {
  long long a, b;
  int c, id;
  subject_t(long long aa = 0, long long bb = 0, int cc = 0, int ii = 0)
      : a(aa), b(bb), c(cc), id(ii) {}
  bool operator<(const subject_t& s) const {
    if (c != s.c) return c < s.c;
    if (a != s.a) return a < s.a;
    return b < s.b;
  }
};
subject_t subject[55];
int n, m, k;
long long dp[51][51][51][101];
long long solve(int pos, int last, int sub, int more) {
  if (pos == n) return 0;
  if (sub == m) return -2e17;
  long long& r = dp[pos][last][sub][more];
  if (r != -1) return r;
  long long ans = solve(pos, last, sub + 1, more);
  if (subject[sub].c > subject[last].c) {
    long long past = subject[last].a + more;
    if (subject[sub].a <= past + k && past + k <= subject[sub].b) {
      long long ax = solve(pos + 1, sub, sub + 1, past + k - subject[sub].a);
      if (ax != -2e17) ans = max(ans, ax + past + k);
    }
    if (subject[sub].a <= past * k && past * k <= subject[sub].b) {
      long long ax = solve(pos + 1, sub, sub + 1, past * k - subject[sub].a);
      if (ax != -2e17) ans = max(ans, ax + past * k);
    }
  }
  r = ans;
  return ans;
}
void show(int pos, int last, int sub, int more) {
  if (pos == n || sub == m) return;
  long long r = dp[pos][last][sub][more];
  if (sub + 1 < m && dp[pos][last][sub + 1][more] == r) {
    show(pos, last, sub + 1, more);
    return;
  }
  if (subject[sub].c > subject[last].c) {
    long long past = subject[last].a + more;
    if (subject[sub].a <= past + k && past + k <= subject[sub].b) {
      long long ax = solve(pos + 1, sub, sub + 1, past + k - subject[sub].a);
      if (ax != -2e17) {
        if (r == ax + past + k) {
          cout << subject[sub].id << " " << past + k << "\n";
          show(pos + 1, sub, sub + 1, past + k - subject[sub].a);
          return;
        }
      }
    }
    if (subject[sub].a <= past * k && past * k <= subject[sub].b) {
      long long ax = solve(pos + 1, sub, sub + 1, past * k - subject[sub].a);
      if (ax != -2e17) {
        if (r == ax + past * k) {
          cout << subject[sub].id << " " << past * k << "\n";
          show(pos + 1, sub, sub + 1, past * k - subject[sub].a);
          return;
        }
      }
    }
  }
  return;
}
int main(int argc, char* argv[]) {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0; i < m; ++i) {
    cin >> subject[i].a >> subject[i].b >> subject[i].c;
    subject[i].id = i + 1;
  }
  sort(subject, subject + m);
  for (int i = 0; i < m; ++i)
    for (int j = 0; j < m; ++j)
      for (int k = 0; k < m; ++k)
        for (int l = 0; l < 101; ++l) dp[i][j][k][l] = -1;
  long long ans = -2e17;
  int first = 0;
  while (first < m) {
    int df = subject[first].b - subject[first].a;
    for (int i = 0; i < df + 1; ++i) {
      long long ax = solve(1, first, first + 1, i);
      if (ax != -2e17) ans = max(ans, ax + subject[first].a + i);
    }
    first++;
  }
  if (ans == -2e17)
    cout << "NO\n";
  else {
    cout << "YES\n";
    first = 0;
    while (first < m) {
      int df = subject[first].b - subject[first].a;
      for (int i = 0; i < df + 1; ++i) {
        long long ax = solve(1, first, first + 1, i);
        if (ax != -2e17 && ans == ax + subject[first].a + i) {
          cout << subject[first].id << " " << subject[first].a + i << "\n";
          show(1, first, first + 1, i);
          goto hell;
        }
      }
      first++;
    }
  }
hell:
  return 0;
}
