#include <bits/stdc++.h>
using namespace std;
void blowback() {
  long long i, j, l, k, q, n, m, x, y, r, ans = 10e17, sum = 0, flag = 0;
  cin >> n >> m >> y;
  vector<pair<long long, long long> > a, b, c, d;
  for (i = 0; i < n; i++) {
    cin >> j >> k >> l;
    if (k == 1 && l == 1)
      c.push_back({j, i + 1});
    else if (k == 1)
      a.push_back({j, i + 1});
    else if (l == 1)
      b.push_back({j, i + 1});
    else
      d.push_back({j, i + 1});
  }
  k = y;
  c.push_back({0, -1});
  sort((a).begin(), (a).end());
  sort((b).begin(), (b).end());
  sort((c).begin(), (c).end());
  while (a.size() > k) {
    d.push_back(a.back());
    a.pop_back();
  }
  while (b.size() > k) {
    d.push_back(b.back());
    b.pop_back();
  }
  while (c.size() > (k + 1)) {
    d.push_back(c.back());
    c.pop_back();
  }
  sort((d).begin(), (d).end());
  multiset<pair<long long, long long> > m1, m2;
  for (i = 0; i < d.size(); i++) m1.insert(d[i]);
  long long s1, s2;
  s1 = s2 = 0;
  vector<pair<long long, long long> > a1, b1;
  for (i = 0; i < a.size(); i++) {
    s1 += a[i].first;
    a1.push_back(a[i]);
  }
  for (i = 0; i < b.size(); i++) {
    s2 += b[i].first;
    b1.push_back(b[i]);
  }
  if (c.size() + a.size() < k || c.size() + b.size() < k) {
    cout << -1;
    return;
  }
  for (i = 0, j = 0, l = 0, x = 0; i < c.size() && i <= y; i++) {
    sum = 0;
    j += c[i].first;
    if (k == a.size() && k == b.size()) {
      sum = s1 + s2 + j;
      while (!m1.empty() && (i + 2 * k + x) < m) {
        l += (*m1.begin()).first;
        m2.insert(*m1.begin());
        m1.erase(m1.begin());
        x++;
      }
      while (!m2.empty() && !m1.empty()) {
        auto it = m2.end();
        it--;
        if ((*m1.begin()).first < (*it).first) {
          pair<long long, long long> p = *it;
          l -= p.first;
          l += (*m1.begin()).first;
          m2.erase(it);
          m2.insert(*m1.begin());
          m1.erase(m1.begin());
          m1.insert(p);
        } else
          break;
      }
      if (a.size() > 0) {
        s1 -= a.back().first;
        m1.insert(a.back());
        a.pop_back();
      }
      if (b.size() > 0) {
        s2 -= b.back().first;
        m1.insert(b.back());
        b.pop_back();
      }
      k--;
      sum += l;
      if ((i + 2 * (k + 1) + x) != m) continue;
      if (ans > (sum)) {
        ans = sum;
        flag = i;
      }
    } else if (k == a.size() && k > 0) {
      s1 -= a.back().first;
      m1.insert(a.back());
      a.pop_back();
      k--;
    } else if (k == b.size() && k > 0) {
      s2 -= b.back().first;
      m1.insert(b.back());
      b.pop_back();
      k--;
    } else
      k--;
  }
  k = y;
  if (ans == 10e17) {
    cout << -1;
    return;
  }
  cout << ans << "\n";
  multiset<pair<long long, long long> > m3;
  for (i = 0; i < d.size(); i++) m3.insert(d[i]);
  for (i = 1; i <= flag; i++) cout << c[i].second << " ";
  for (i = 0; i < (k - flag); i++) cout << a1[i].second << " ";
  for (; i < a1.size(); i++) m3.insert(a1[i]);
  for (i = 0; i < (k - flag); i++) cout << b1[i].second << " ";
  for (; i < b1.size(); i++) m3.insert(b1[i]);
  i = 0;
  for (auto it = m3.begin(); i < (m - flag - 2 * (k - flag)); i++, it++)
    cout << (*it).second << " ";
}
signed main() {
  long long int t = 1;
  while (t--) {
    blowback();
  }
  return 0;
}
