#include <bits/stdc++.h>
using namespace std;
long long kkk, dd, lsg, n, k, sum, x[200000], y[200000], flag[200000],
    f[200000], z[10][200000];
struct lsg {
  long long x, y, z;
} a[200000];
inline void outit() {
  puts("NO");
  exit(0);
}
inline long long random(long long x) {
  return ((rand() % 1024 * 1ll << 50) + (rand() % 1024 * 1ll << 40) +
          (rand() % 1024 * 1ll << 30) + (rand() % 1024 * 1ll << 20) +
          (rand() % 1024 * 1ll << 10) + (rand() % 1024 * 1ll)) %
         x;
}
inline long long read() {
  char c = getchar();
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  long long k = 1, kk = 0;
  if (c == '-')
    k = -1;
  else
    kk = c - '0';
  c = getchar();
  while (c >= '0' && c <= '9') kk = kk * 10 + c - '0', c = getchar();
  return kk * k;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writeln(long long x) {
  write(x);
  puts("");
}
inline void dfs(long long d, long long nn) {
  if (nn <= d) {
    puts("YES");
    writeln(k - d + nn);
    for (long long i = 1; i <= dd; i++)
      write(x[i]), putchar(' '), writeln(y[i]);
    for (long long i = 1; i <= nn; i++) write(f[i]), puts(" -1");
    exit(0);
  }
  if (d == 0) return;
  dd++;
  for (long long i = 1; i <= nn; i++) z[d][i] = f[i];
  for (long long i = 1; i <= sum; i++) {
    long long xx = 0, yy = 0;
    for (long long j = 1; j <= 1000; j++)
      if (xx == yy ||
          a[z[d][xx]].x * a[z[d][yy]].y - a[z[d][yy]].x * a[z[d][xx]].y == 0)
        xx = random(nn) + 1, yy = random(nn) + 1;
      else
        break;
    if (xx == yy ||
        a[z[d][xx]].x * a[z[d][yy]].y - a[z[d][yy]].x * a[z[d][xx]].y == 0)
      outit();
    x[dd] = z[d][xx];
    y[dd] = z[d][yy];
    long long kk = 0;
    double xxx =
        (0.0 + a[z[d][yy]].z * a[z[d][xx]].y - a[z[d][xx]].z * a[z[d][yy]].y) /
        (a[z[d][xx]].x * a[z[d][yy]].y - a[z[d][yy]].x * a[z[d][xx]].y);
    double yyy =
        (0.0 + a[z[d][yy]].x * a[z[d][xx]].z - a[z[d][xx]].x * a[z[d][yy]].z) /
        (a[z[d][xx]].x * a[z[d][yy]].y - a[z[d][yy]].x * a[z[d][xx]].y);
    for (long long j = 1; j <= nn; j++)
      if (fabs(a[z[d][j]].x * xxx + a[z[d][j]].y * yyy + a[z[d][j]].z) > 1e-7)
        f[++kk] = z[d][j];
    if (kk <= max(d - 1, nn - nn / d)) dfs(d - 1, kk);
  }
  dd--;
  for (long long j = 1; j <= nn; j++) f[j] = z[d][j];
}
signed main() {
  srand(time(NULL));
  n = read();
  k = read();
  for (long long i = 1; i <= n; i++)
    a[i].x = read(), a[i].y = read(), a[i].z = read(), f[i] = i;
  sum = 20;
  if (n <= 100) sum = 500;
  kkk = n;
  dfs(k, n);
  outit();
}
