#include <bits/stdc++.h>
using namespace std;
const long long maxn = 100000 + 5;
const double eps = 1e-7;
inline long long dcmp(double x) { return abs(x) < eps ? 0 : (x > 0 ? 1 : -1); }
struct Line {
  long long A, B, C;
  inline bool onLine(double x, double y) {
    return dcmp(A * x + B * y + C) == 0;
  }
} line[maxn];
vector<pair<long long, long long> > ans;
bool dfs(long long k, vector<long long>& vec) {
  if (k == 0) return vec.size() == 0;
  if (vec.size() <= k) {
    for (long long i = 0; i < vec.size(); i++)
      ans.push_back(make_pair(vec[i], -2));
    return 1;
  }
  if (vec.size() > k * k * 30 && (k == 5 || k == 4)) {
    for (long long dotime = 0; dotime < 150; dotime++) {
      long long l1 = rand() % vec.size(), l2 = rand() % vec.size();
      if (l1 == l2) continue;
      if (l1 > l2) swap(l1, l2);
      l1 = vec[l1];
      l2 = vec[l2];
      double y = (double)(line[l1].A * line[l2].C - line[l1].C * line[l2].A) /
                 (line[l1].B * line[l2].A - line[l1].A * line[l2].B),
             x = -(double)(line[l1].B * y + line[l1].C) / line[l1].A;
      vector<long long> nx;
      long long cnt = 0;
      for (long long i = 0; i < vec.size(); i++)
        if (line[vec[i]].onLine(x, y))
          cnt++;
        else
          nx.push_back(vec[i]);
      if (cnt > k) {
        ans.push_back(make_pair(l1, l2));
        if (!dfs(k - 1, nx)) {
          ans.pop_back();
          return 0;
        } else
          return 1;
      }
    }
    return 0;
  }
  for (long long i = 0; i < k + 1; i++)
    for (long long j = i + 1; j < k + 1; j++) {
      long long l1 = vec[i], l2 = vec[j];
      ans.push_back(make_pair(l1, l2));
      vector<long long> nx;
      double y = (double)(line[l1].A * line[l2].C - line[l1].C * line[l2].A) /
                 (line[l1].B * line[l2].A - line[l1].A * line[l2].B),
             x = -(double)(line[l1].B * y + line[l1].C) / line[l1].A;
      for (long long k = 0; k < vec.size(); k++)
        if (!line[vec[k]].onLine(x, y)) nx.push_back(vec[k]);
      if (dfs(k - 1, nx)) return 1;
      ans.pop_back();
    }
  return 0;
}
inline long long readint() {
  char c = getchar();
  for (; c != '-' && (c < '0' || c > '9'); c = getchar())
    ;
  bool neg = (c == '-' ? 1 : 0);
  if (c == '-') c = getchar();
  long long ret = 0;
  for (; c >= '0' && c <= '9'; c = getchar()) ret = ret * 10 + c - '0';
  return (neg ? -1 : 1) * ret;
}
int main() {
  srand(time(NULL));
  vector<long long> vec;
  long long n = readint(), k = readint();
  for (long long i = 0; i < n; i++) {
    line[i].A = readint();
    line[i].B = readint();
    line[i].C = readint();
    vec.push_back(i);
  }
  if (dfs(k, vec)) {
    printf("YES\n%lld\n", (long long)ans.size());
    for (long long i = 0; i < ans.size(); i++)
      printf("%lld %lld\n", ans[i].first + 1, ans[i].second + 1);
  } else
    printf("NO\n");
}
