#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
const int inf = 0x3f3f3f3f;
struct Trip {
  int id, ids, s, len, t;
  bool operator<(const Trip &rhs) const { return t < rhs.t; }
};
Trip trips[maxn];
int dp[1 << maxn], idt[maxn], n, p, ALL;
pair<int, int> ans[1 << maxn], res[maxn];
vector<pair<int, int> > intervals[2];
unordered_map<int, int> mmap;
inline bool cmp(const Trip &lhs, const Trip &rhs) { return lhs.s < rhs.s; }
void init() {
  ALL = (1 << n) - 1;
  for (int(i) = (0); (i) <= ((n)-1); (i)++) mmap[1 << i] = i;
  memset(dp, 0x3f, sizeof(dp));
  sort(trips, trips + n, cmp);
  for (int(i) = (0); (i) <= ((n)-1); (i)++) trips[i].ids = i;
  intervals[0] = {make_pair(1, inf)};
  int u = 0, v = 1;
  for (int(i) = (0); (i) <= ((n)-1); (i)++) {
    intervals[v] = intervals[u];
    intervals[v].pop_back();
    if (intervals[u].back().first < trips[i].s)
      intervals[v].push_back(
          make_pair(intervals[u].back().first, trips[i].s - 1));
    intervals[v].push_back(make_pair(trips[i].s + trips[i].len, inf));
    swap(u, v);
  }
  intervals[1] = intervals[u];
  dp[0] = 0;
  sort(trips, trips + n);
  for (int(i) = (0); (i) <= ((n)-1); (i)++) idt[trips[i].ids] = i;
}
inline int getT(int t1, int t2) { return t2 == inf ? inf : t2 - t1; }
void update(int s, int now, int &p1, int &p2) {
  int st = max(intervals[0][p2].first, dp[s]), ss = s | (1 << trips[now].ids);
  while (st > intervals[1][p1].second) p1++;
  if (st < intervals[1][p1].first) st = intervals[1][p1].first;
  while (getT(st, intervals[0][p2].second) < trips[now].t) {
    p2++;
    while (intervals[1][p1].first < intervals[0][p2].first) {
      p1++;
      st = intervals[1][p1].first;
    }
  }
  if (dp[ss] > st + trips[now].t) {
    int tmp = dp[ss];
    dp[ss] = st + trips[now].t;
    if (dp[ss] >= trips[now].s) {
      dp[ss] = tmp;
      return;
    }
    ans[ss] = make_pair(s, st);
  }
}
void print(int ps, int s) {
  if (!s) return;
  res[trips[mmap[s ^ ans[s].first]].id] = make_pair(ps, ans[s].second);
  print(ps, ans[s].first);
}
int main() {
  scanf("%d%d", &n, &p);
  for (int(i) = (0); (i) <= ((n)-1); (i)++) {
    scanf("%d%d%d", &trips[i].s, &trips[i].len, &trips[i].t);
    trips[i].id = i;
  }
  init();
  for (int(s) = (0); (s) <= ((1 << n) - 1); (s)++) {
    if (dp[s] == inf) continue;
    int p1 = 0, p2 = 0;
    intervals[0] = {make_pair(1, inf)};
    for (int(i) = (0); (i) <= ((n)-1); (i)++) {
      if (s & (1 << i)) {
        pair<int, int> tmp = intervals[0].back();
        if (tmp.first < trips[idt[i]].s)
          intervals[0].back().second = trips[idt[i]].s - 1;
        else
          intervals[0].pop_back();
        intervals[0].push_back(
            make_pair(trips[idt[i]].s + trips[idt[i]].len, inf));
      }
    }
    for (int(i) = (0); (i) <= ((n)-1); (i)++) {
      if (s & (1 << trips[i].ids)) continue;
      update(s, i, p1, p2);
    }
  }
  sort(trips, trips + n, cmp);
  if (p == 1) {
    if (dp[ALL] < inf) {
      puts("YES");
      print(1, ALL);
      for (int(i) = (0); (i) <= ((n)-1); (i)++)
        printf("%d %d\n", res[i].first, res[i].second);
    } else
      puts("NO");
  } else {
    bool flag = false;
    for (int(s) = (0); (s) <= ((1 << n) - 1); (s)++) {
      if (dp[s] < inf && dp[ALL ^ s] < inf) {
        puts("YES");
        print(1, s);
        print(2, ALL ^ s);
        for (int(i) = (0); (i) <= ((n)-1); (i)++)
          printf("%d %d\n", res[i].first, res[i].second);
        flag = true;
        break;
      }
    }
    if (!flag) puts("NO");
  }
  return 0;
}
