#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
using ll = long long;
using ld = long double;
const ld EPS = 1e-12;
int n, kk, p[N];
struct Line {
  ll a, b, c;
} l[N];
struct Ans {
  int x, y;
} ans[10];
mt19937_64 mt;
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> kk;
  for (int i = 1; i <= n; i++) cin >> l[i].a >> l[i].b >> l[i].c, p[i] = i;
  mt.seed(time(0));
  int num = 0;
  for (int i = 1; i <= kk && n; i++) {
    int mx = 0, t1 = 0, t2 = 0;
    uniform_int_distribution<int> u(1, n);
    for (int j = 1; j <= 100; j++) {
      int x = u(mt), y = u(mt);
      if (x > y) swap(x, y);
      x = p[x];
      y = p[y];
      if (l[x].a * l[y].b == l[y].a * l[x].b) {
        if (mx < 1) mx = 1, t1 = x, t2 = -1;
        continue;
      }
      ld xx = -ld(l[y].b * l[x].c - l[x].b * l[y].c) /
              (l[y].b * l[x].a - l[x].b * l[y].a);
      ld yy = -ld(l[y].a * l[x].c - l[x].a * l[y].c) /
              (l[y].a * l[x].b - l[x].a * l[y].b);
      int cnt = 0;
      for (int k = 1; k <= n; k++)
        if (abs(xx * l[p[k]].a + yy * l[p[k]].b + l[p[k]].c) < EPS) ++cnt;
      assert(cnt >= 2);
      if (mx < cnt) mx = cnt, t1 = x, t2 = y;
    }
    ans[i] = {t1, t2};
    ++num;
    if (t2 == -1) {
      int nn = n;
      n = 0;
      for (int j = 1; j <= nn; j++)
        if (p[j] != t1) p[++n] = p[j];
      continue;
    }
    ld xx = -ld(l[t2].b * l[t1].c - l[t1].b * l[t2].c) /
            (l[t2].b * l[t1].a - l[t1].b * l[t2].a);
    ld yy = -ld(l[t2].a * l[t1].c - l[t1].a * l[t2].c) /
            (l[t2].a * l[t1].b - l[t1].a * l[t2].b);
    int nn = n;
    n = 0;
    for (int k = 1; k <= nn; k++)
      if (abs(xx * l[p[k]].a + yy * l[p[k]].b + l[p[k]].c) >= EPS)
        p[++n] = p[k];
  }
  if (n) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES\n" << num << endl;
  for (int i = 1; i <= kk && ans[i].x; i++)
    cout << ans[i].x << ' ' << ans[i].y << endl;
  return 0;
}
