#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void program();
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  program();
}
const int MX = 5e5;
int n, m, k, t[MX], a[MX], b[MX];
int SA[MX], sm[MX][4], cnt[4];
int id[MX][4];
void moveSet(set<pair<int, int> >& fr, set<pair<int, int> >& st, int& sum,
             int size) {
  while (true) {
    if (st.size() < size && !fr.empty()) {
      sum += fr.begin()->first;
      st.insert(*fr.begin());
      fr.erase(fr.begin());
      continue;
    }
    if (st.size() > size && !st.empty()) {
      sum -= (*st.end()).first;
      fr.insert(*--st.end());
      st.erase(--st.end());
      continue;
    }
    if (!st.empty() && !fr.empty() && (*--st.end()).first > fr.begin()->first) {
      sum += fr.begin()->first;
      sum -= (*st.end()).first;
      st.insert(*fr.begin());
      fr.erase(fr.begin());
      fr.insert(*--st.end());
      st.erase(--st.end());
      continue;
    }
    break;
  }
}
void program() {
  cin >> n >> m >> k;
  for (int i = int(0); i < int(n); i++) cin >> t[i] >> a[i] >> b[i];
  for (int i = int(0); i < int(n); i++) SA[i] = i;
  sort(SA, SA + n, [](int i, int j) { return t[i] < t[j]; });
  for (int i = int(0); i < int(4); i++) sm[0][i] = 0;
  for (int i = int(0); i < int(n); i++) {
    int bm = a[SA[i]] + b[SA[i]] * 2;
    id[cnt[bm]][bm] = SA[i];
    cnt[bm]++;
    sm[cnt[bm]][bm] = sm[cnt[bm] - 1][bm] + t[SA[i]];
  }
  int ans = 2e9 + 10;
  set<int> sAns;
  for (int iter = int(0); iter < int(2); iter++) {
    set<pair<int, int> > fr, st;
    int sum = 0;
    for (int i = int(0); i < int(n); i++) {
      int bm = a[i] + b[i] * 2;
      if (bm == 3) continue;
      fr.insert({t[i], i});
    }
    int cur = 0;
    for (int both = int(0); both < int(min(cnt[3], k) + 1); both++) {
      if (k - both > min(cnt[1], cnt[2])) continue;
      if (both + 2 * (k - both) > m) continue;
      while (cur < k - both) {
        for (int i = int(1); i < int(3); i++) {
          pair<int, int> p = {t[id[cur][i]], id[cur][i]};
          fr.erase(p);
          st.erase(p);
        }
        cur++;
      }
      while (cur > k - both) {
        cur--;
        for (int i = int(1); i < int(3); i++) {
          pair<int, int> p = {t[id[cur][i]], id[cur][i]};
          fr.insert(p);
        }
      }
      moveSet(fr, st, sum, m - both - 2 * (k - both));
      if (st.size() != m - both - 2 * (k - both)) continue;
      ans = min(ans, sm[both][3] + sm[k - both][1] + sm[k - both][2] + sum);
      if (iter == 1 &&
          ans == sm[both][3] + sm[k - both][1] + sm[k - both][2] + sum) {
        for (int i = int(0); i < int(k - both); i++) sAns.insert(id[i][1] + 1);
        for (int i = int(0); i < int(k - both); i++) sAns.insert(id[i][2] + 1);
        for (int i = int(0); i < int(both); i++) sAns.insert(id[i][3] + 1);
        for (auto it : st) sAns.insert(it.second + 1);
      }
    }
  }
  if (ans == 2e9 + 10) ans = -1;
  cout << ans << endl;
  bool f = 1;
  for (auto it : sAns) cout << (f ? "" : " ") << it, f = 0;
  cout << endl;
}
