#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
const int inf = 2e9;
int dp[1 << maxn], way[1 << maxn];
int start_hole[maxn], len_hole[maxn];
int N, P;
struct Trip {
  int start, len, tvisa, id, pos;
  void read() { scanf("%d%d%d", &start, &len, &tvisa); }
} trip[maxn + 1], trip_sorted[maxn + 1];
bool compare_start(Trip t1, Trip t2) {
  if (t1.start != t2.start) return t1.start < t2.start;
  return t1.id < t2.id;
}
bool compare_tvisa(Trip t1, Trip t2) {
  if (t1.tvisa != t2.tvisa) return t1.tvisa < t2.tvisa;
  return t1.id < t2.id;
}
void solve1() {
  fill(dp + 1, dp + (1 << N), inf);
  fill(way, way + (1 << N), -1);
  dp[0] = 1;
  for (int mask = 0; mask < (1 << N); ++mask) {
    int tmin = dp[mask];
    int inext = -1;
    for (int i = 0; i < N; ++i)
      if (trip[i].start >= tmin) {
        if (inext == -1 || trip[i].start < trip[inext].start) inext = i;
      }
    if (inext == -1) continue;
    int istart = inext;
    for (int k = 0; k < N; ++k) {
      int i = trip_sorted[k].pos;
      int tvisa = trip[i].tvisa;
      if ((mask >> i) & 1) continue;
      int newstart = tmin;
      while (inext < N) {
        int len = len_hole[inext];
        newstart = start_hole[inext];
        if (inext == istart) {
          len = trip[inext].start - tmin - 1;
          newstart = tmin;
        }
        if (len >= tvisa) break;
        inext++;
      }
      if (inext > i) continue;
      int newv = newstart + tvisa;
      int newi = mask | (1 << i);
      if (dp[newi] > newv) {
        dp[newi] = newv;
        way[newi] = i;
      }
    }
  }
  int mask = (1 << N) - 1;
  if (dp[mask] == inf) {
    puts("NO");
    return;
  }
  vector<int> ans(N);
  while (mask != 0) {
    int inext = way[mask];
    assert(inext != -1);
    ans[trip[inext].id] = dp[mask] - trip[inext].tvisa;
    mask -= (1 << inext);
  }
  puts("YES");
  for (int i = 0; i < N; ++i) printf("1 %d\n", ans[i]);
}
void try_from(int mask, int pos, int& iin, int& k) {
  while (iin < N) {
    if (((mask >> iin) & 1) && trip[iin].start >= pos) break;
    iin++;
  }
  for (; k < N; ++k) {
    int i = trip_sorted[k].pos;
    int tvisa = trip[i].tvisa;
    if ((mask >> i) & 1) continue;
    if (iin < N && pos + tvisa >= trip[iin].start) return;
    if (pos + tvisa >= trip[i].start) continue;
    int newv = pos + tvisa;
    int newi = mask | (1 << i);
    if (dp[newi] > newv) {
      dp[newi] = newv;
      way[newi] = i;
    }
  }
}
void solve2() {
  fill(dp + 1, dp + (1 << N), inf);
  fill(way, way + (1 << N), -1);
  dp[0] = 1;
  for (int mask = 0; mask < (1 << N); ++mask) {
    int tmin = dp[mask];
    int iin = 0, kin = 0;
    bool can = true;
    for (int i = 0; i < N; ++i)
      if (trip[i].start <= tmin && tmin <= trip[i].start + trip[i].len)
        can = false;
    if (can) try_from(mask, tmin, iin, kin);
    for (int i = 0; i < N; ++i)
      if (trip[i].start + trip[i].len >= tmin &&
          (i == N - 1 || trip[i].start + trip[i].len < trip[i + 1].start))
        try_from(mask, trip[i].start + trip[i].len, iin, kin);
  }
  int ansmask = -1;
  for (int mask = 0; mask < (1 << N); ++mask)
    if (dp[mask] < inf && dp[(1 << N) - 1 - mask] < inf) ansmask = mask;
  if (ansmask == -1) {
    puts("NO");
    return;
  }
  vector<pair<int, int>> ans(N);
  int mask = ansmask;
  while (mask != 0) {
    int inext = way[mask];
    assert(inext != -1);
    ans[trip[inext].id] = make_pair(1, dp[mask] - trip[inext].tvisa);
    mask -= (1 << inext);
  }
  mask = (1 << N) - 1 - ansmask;
  while (mask != 0) {
    int inext = way[mask];
    assert(inext != -1);
    ans[trip[inext].id] = make_pair(2, dp[mask] - trip[inext].tvisa);
    mask -= (1 << inext);
  }
  puts("YES");
  for (int i = 0; i < N; ++i) printf("%d %d\n", ans[i].first, ans[i].second);
}
int main() {
  scanf("%d%d", &N, &P);
  for (int i = 0; i < N; ++i) {
    trip[i].read();
    trip[i].id = i;
  }
  sort(trip, trip + N, compare_start);
  for (int i = 0; i < N; ++i) trip[i].pos = i;
  int prev = 1;
  for (int i = 0; i < N; ++i) {
    start_hole[i] = prev;
    len_hole[i] = trip[i].start - prev - 1;
    prev = trip[i].start + trip[i].len;
  }
  copy(trip, trip + N, trip_sorted);
  sort(trip_sorted, trip_sorted + N, compare_tvisa);
  trip[N].start = inf;
  if (P == 1)
    solve1();
  else
    solve2();
}
