#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  x = 0;
  bool f = 0;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar()) f |= ch == '-';
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 1LL) + (x << 3LL) + ch - '0';
  x = f ? -x : x;
}
template <typename T1, typename T2>
inline void updmax(T1 &x, T2 y) {
  x = x > y ? x : y;
}
template <typename T1, typename T2>
inline bool chkmin(T1 &x, T2 y) {
  return x > y ? x = y, 1 : 0;
}
int n, S, p, f[1 << 22];
struct node {
  int l, r, t, id;
} a[25], b[25];
bool cmp1(node A, node B) { return A.l < B.l; }
bool cmp2(node A, node B) { return A.t < B.t; }
struct From {
  int id, st;
} from[1 << 22], ans[25];
void putcol(int s, int id) {
  if (s)
    ans[from[s].id] = (From){id, from[s].st}, putcol(s ^ (1 << from[s].id), id);
}
void solve1() {
  if (f[S - 1] == 0x3f3f3f3f) {
    puts("NO");
    return;
  }
  puts("YES"), putcol(S - 1, 1);
  for (int i = 0; i < n; i++) printf("%d %d\n", ans[i].id, ans[i].st);
}
void solve2() {
  int s = 0;
  for (; s < S; s++)
    if (f[s] < 0x3f3f3f3f && f[(S - 1) ^ s] < 0x3f3f3f3f) break;
  if (s == S) {
    puts("NO");
    return;
  }
  puts("YES"), putcol(s, 1), putcol((S - 1) ^ s, 2);
  for (int i = 0; i < n; i++) printf("%d %d\n", ans[i].id, ans[i].st);
}
int main() {
  read(n), read(p), S = 1 << n;
  for (int i = 1; i <= n; i++) {
    read(a[i].l), read(a[i].r), read(a[i].t);
    a[i].r += a[i].l - 1, a[i].id = i - 1, b[i] = a[i];
  }
  sort(a + 1, a + 1 + n, cmp1), sort(b + 1, b + 1 + n, cmp2);
  for (int i = 1; i < S; i++) f[i] = 0x3f3f3f3f;
  f[0] = 1;
  for (int s = 0, i, j, T; s < S; s++)
    if (f[s] < 0x3f3f3f3f) {
      for (i = 1, j = 1, T = f[s]; i <= n; i++)
        if (!(s & (1 << b[i].id))) {
          for (; j <= n && T + b[i].t >= a[j].l; j++) {
            ((s & (1 << a[j].id)) || T >= a[j].l) ? updmax(T, a[j].r + 1)
                                                  : (void)0;
          }
          if (T + b[i].t < b[i].l && chkmin(f[s | (1 << b[i].id)], T + b[i].t))
            from[s | (1 << b[i].id)] = (From){b[i].id, T};
        }
    }
  p == 1 ? solve1() : solve2();
  return 0;
}
