#include <bits/stdc++.h>
int dx[4] = {0, -1, 0, 1};
int dy[4] = {1, 0, -1, 0};
using namespace std;
struct City {
  long long A, B, C, id;
};
vector<City> city;
struct Point {
  double x, y;
  int u, v;
  friend bool operator<(const Point &a, const Point &b) {
    return a.x < b.x - 1e-8 || (a.x < b.x + 1e-8 && a.y < b.y - 1e-8);
  }
};
Point intersact(City p, City q) {
  Point ret;
  if (p.A * q.B == p.B * q.A) {
    ret.u = -1;
    return ret;
  }
  ret.u = p.id;
  ret.v = q.id;
  ret.x = -1.0 * (p.C * q.B - q.C * p.B) / (p.A * q.B - q.A * p.B);
  ret.y = -1.0 * (p.C * q.A - q.C * p.A) / (p.B * q.A - q.B * p.A);
  return ret;
}
bool incity(Point p, City c) {
  double t = p.x * c.A + p.y * c.B + c.C;
  return fabs(t) < 1e-8;
}
int n, K;
pair<bool, vector<pair<int, int>>> work(vector<City> &a, int K) {
  int n = a.size();
  vector<pair<int, int>> ret;
  if (n <= K) {
    for (int i = 0; i < int(n); ++i) ret.push_back({a[i].id, -1});
    return make_pair(true, ret);
  }
  map<Point, int> cnt;
  if (n <= (K * K + 1) * (K + 1)) {
    for (int i = 0; i < int(n); ++i)
      for (int j = 0; j < int(i); ++j) {
        Point tmp = intersact(a[i], a[j]);
        if (tmp.u == -1) continue;
        for (int k = 0; k < int(n); ++k)
          if (incity(tmp, a[i])) {
            cnt[tmp]++;
          }
      }
  } else {
    for (int k = 0; k < n; k += K + 1) {
      for (int j = k + 1; j < n && (j - k) <= K; j++)
        for (int i = k; i < j; i++) {
          Point tmp = intersact(a[i], a[j]);
          if (tmp.u == -1) continue;
          cnt[tmp]++;
        }
    }
  }
  if (cnt.size() == 0) return {false, ret};
  vector<pair<int, Point>> cnt1;
  for (auto q : cnt) cnt1.push_back({q.second, q.first});
  sort(cnt1.begin(), cnt1.end());
  reverse(cnt1.begin(), cnt1.end());
  if (cnt1[0].first > K) {
    vector<City> next;
    for (auto c : a)
      if (incity(cnt1[0].second, c) == false) next.push_back(c);
    auto result = work(next, K - 1);
    result.second.push_back({cnt1[0].second.u, cnt1[0].second.v});
    return result;
  } else {
    for (int i = 0; cnt1[i].first * K >= n; i++) {
      vector<City> next;
      for (auto c : a)
        if (incity(cnt1[i].second, c) == false) next.push_back(c);
      auto result = work(next, K - 1);
      result.second.push_back({cnt1[i].second.u, cnt1[i].second.v});
      if (result.first) return result;
    }
  }
  return {false, vector<pair<int, int>>()};
}
int Main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> K;
  city.resize(n);
  for (int i = 0; i < int(n); ++i) {
    cin >> city[i].A >> city[i].B >> city[i].C;
    city[i].id = i + 1;
  }
  auto p = work(city, K);
  if (p.first) {
    auto res = p.second;
    cout << "YES" << endl;
    cout << res.size() << endl;
    for (auto p : res) cout << p.first << " " << p.second << endl;
  } else {
    cout << "NO" << endl;
  }
  return 0;
}
int main() { return Main(); }
