#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
vector<pair<long long, long long> > vecA, vecB, vecAB, vecO;
vector<long long> sumA, sumB, sumAB, sumO;
multiset<long long> S;
long long sumS;
void make(vector<pair<long long, long long> > vec, vector<long long> &sum) {
  sum.push_back(0);
  long long s = 0;
  for (int i = 0; i < vec.size(); i++) {
    s += vec[i].first;
    sum.push_back(s);
  }
}
void add(long long x) {
  S.insert(x);
  sumS += x;
}
void del(long long x) {
  auto it = S.lower_bound(x);
  if (it == S.end() || *it != x) return;
  S.erase(it);
  sumS -= x;
}
void pop() {
  auto it = S.end();
  it--;
  sumS -= *it;
  S.erase(it);
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> k;
  long long t, a, b;
  for (int i = 1; i <= n; i++) {
    cin >> t >> a >> b;
    if (a == 0) {
      if (b == 0)
        vecO.push_back(pair<long long, long long>(t, i));
      else
        vecB.push_back(pair<long long, long long>(t, i));
    } else {
      if (b == 0)
        vecA.push_back(pair<long long, long long>(t, i));
      else
        vecAB.push_back(pair<long long, long long>(t, i));
    }
  }
  sort(vecA.begin(), vecA.end());
  sort(vecB.begin(), vecB.end());
  sort(vecAB.begin(), vecAB.end());
  sort(vecO.begin(), vecO.end());
  make(vecA, sumA);
  make(vecB, sumB);
  make(vecAB, sumAB);
  make(vecO, sumO);
  long long ans = 1e18, ans_i;
  for (int i = 0; i < vecAB.size(); i++) add(vecAB[i].first);
  for (int i = k; i < vecA.size(); i++) add(vecA[i].first);
  for (int i = k; i < vecB.size(); i++) add(vecB[i].first);
  for (int i = 0; i < vecO.size(); i++) add(vecO[i].first);
  long long N = min(k, (long long)vecAB.size());
  for (int i = 0; i <= N; i++) {
    long long tmp = sumAB[i];
    long long rem = m - (i + 2 * (k - i));
    while (S.size() > max(0LL, rem)) pop();
    if (vecA.size() >= k - i && vecB.size() >= k - i && rem >= 0 &&
        S.size() >= rem) {
      tmp += sumA[k - i] + sumB[k - i] + sumS;
      if (ans > tmp) {
        ans = tmp;
        ans_i = i;
      }
    }
    if (k - i - 1 >= 0 && k - i - 1 < vecA.size()) add(vecA[k - i - 1].first);
    if (k - i - 1 >= 0 && k - i - 1 < vecB.size()) add(vecB[k - i - 1].first);
    if (i < vecAB.size()) del(vecAB[i].first);
  }
  if (ans > 1e18 / 2) {
    cout << -1 << endl;
    return 0;
  }
  vector<long long> avec;
  vector<pair<long long, long long> > tmp;
  for (int i = 0; i < vecAB.size(); i++) {
    if (i < ans_i)
      avec.push_back(vecAB[i].second);
    else
      tmp.push_back(vecAB[i]);
  }
  for (int i = 0; i < vecA.size(); i++) {
    if (i < k - ans_i)
      avec.push_back(vecA[i].second);
    else
      tmp.push_back(vecA[i]);
  }
  for (int i = 0; i < vecB.size(); i++) {
    if (i < k - ans_i)
      avec.push_back(vecB[i].second);
    else
      tmp.push_back(vecB[i]);
  }
  for (int i = 0; i < vecO.size(); i++) tmp.push_back(vecO[i]);
  sort(tmp.begin(), tmp.end());
  for (int i = 0; i < m - (ans_i + 2 * (k - ans_i)); i++)
    avec.push_back(tmp[i].second);
  cout << ans << endl;
  for (int i = 0; i < avec.size(); i++) cout << avec[i] << " ";
  cout << endl;
  return 0;
}
