#include <bits/stdc++.h>
using namespace std;
const long long linf = 1e18 + 5;
const int mod = (int)1e9 + 7;
const int logN = 17;
const int inf = 1e9;
const int N = 2e5 + 5;
int n, m, k, x, y, z;
pair<int, int> ans[N];
map<pair<double, double>, int> H;
class line {
 public:
  int a, b, c, index;
  line(int x, int y, int z, int aa) {
    a = x, b = y, c = z;
    index = aa;
  }
};
pair<double, double> intersect(line x, line y) {
  double xx, yy;
  yy =
      (1.0 * x.c * y.a - 1.0 * y.c * x.a) / (1.0 * x.a * y.b - 1.0 * y.a * x.b);
  xx = (-yy * x.b - x.c) / (1.0 * x.a);
  if (x.a == 0) xx = (-yy * y.b - y.c) / (1.0 * y.a);
  return make_pair(xx, yy);
}
bool ok(line x, line y) {
  if (abs(1.0 * x.a * y.b - 1.0 * y.a * x.b) <= 0.00000001) return 0;
  return 1;
}
bool ct(pair<double, double> x, pair<double, double> y) {
  if (abs(x.first - y.first) > 0.000000001 ||
      abs(y.second - x.second) > 0.000000001)
    return 1;
  return 0;
}
void solve(vector<line> v, int k) {
  if ((int)v.size() <= k) {
    printf("YES\n");
    cout << (::k - k) + v.size() << '\n';
    for (int i = k + 1; i <= ::k; i++)
      printf("%d %d\n", ans[i].first, ans[i].second);
    for (__typeof(v.begin()) it = v.begin(); it != v.end(); it++)
      printf("%d -1\n", (*it).index);
    exit(0);
  }
  if (!k) return;
  random_shuffle(v.begin(), v.end());
  int mx = 0;
  pair<double, double> dd;
  H.clear();
  for (int i = 1; i <= (int)v.size() - 1; i++)
    if (ok(v[0], v[i])) {
      pair<double, double> c = intersect(v[0], v[i]);
      H[c]++;
      if (H[c] > mx) {
        mx = H[c];
        dd = c;
        ans[k] = make_pair(v[0].index, v[i].index);
      }
    }
  if (!ans) return;
  vector<line> nx;
  for (int i = 1; i <= (int)v.size() - 1; i++)
    if (!ok(v[i], v[0]) || ct(intersect(v[i], v[0]), dd)) nx.push_back(v[i]);
  solve(nx, k - 1);
}
int main() {
  srand(time(0));
  scanf("%d %d", &n, &k);
  vector<line> v, t;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d %d", &x, &y, &z);
    v.push_back((line){x, y, z, i});
  }
  t = v;
  while (1) {
    v = t;
    solve(v, k);
    if ((clock()) / (double)CLOCKS_PER_SEC > 1.5) break;
  }
  cout << "NO\n";
  return 0;
}
