#include <bits/stdc++.h>
const long long INF = 1e18 + 5991243;
using namespace std;
long long n, m, k, ans = INF, opt = -1, upto, ptr[4];
vector<long long> book[10], psum[10];
vector<pair<long long, long long> > ids[10];
void solve(long long p3) {
  ptr[0] = 0;
  ptr[1] = ptr[2] = max(0LL, k - p3);
  ptr[3] = p3;
  if (p3 > m || ptr[1] > min(book[1].size(), book[2].size())) {
    return;
  }
  long long rem = m, result = 0;
  for (int i = 0; i <= 3; i++) {
    rem -= ptr[i];
    result += psum[i][ptr[i]];
  }
  if (rem < 0) {
    return;
  }
  if (rem == 0) {
    if (result < ans) {
      ans = result;
      opt = p3;
    }
    return;
  }
  long long l = 0, r = 100000;
  upto = -1;
  while (l <= r) {
    long long tot = 0, mid = (l + r) / 2;
    for (int i = 0; i <= 3; i++) {
      tot += upper_bound(book[i].begin() + ptr[i], book[i].end(), mid) -
             book[i].begin();
    }
    if (tot >= m) {
      r = mid - 1;
    } else {
      l = mid + 1;
      upto = mid;
    }
  }
  long long tot = 0;
  result = 0;
  assert(upto != -1);
  for (int i = 0; i <= 3; i++) {
    ptr[i] = upper_bound(book[i].begin() + ptr[i], book[i].end(), upto) -
             book[i].begin();
    tot += ptr[i];
    result += psum[i][ptr[i]];
  }
  if (tot < m) {
    result += (upto + 1) * (m - tot);
  }
  if (result < ans) {
    ans = result;
    opt = p3;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    long long t, a, b;
    cin >> t >> a >> b;
    book[a << 1 | b].push_back(t);
    ids[a << 1 | b].push_back(pair<long long, long long>(t, i));
  }
  for (int i = 0; i < 4; i++) {
    sort(book[i].begin(), book[i].end());
    sort(ids[i].begin(), ids[i].end());
    psum[i].resize(book[i].size() + 1);
    for (int j = 1; j < psum[i].size(); j++) {
      psum[i][j] = psum[i][j - 1] + book[i][j - 1];
    }
  }
  for (long long p3 = 0; p3 <= book[3].size(); p3++) {
    solve(p3);
  }
  if (ans == INF) {
    cout << "-1\n";
  } else {
    cout << ans << '\n';
    solve(opt);
    vector<int> ans_id;
    for (int i = 0; i <= 3; i++) {
      for (int j = 0; j < ptr[i]; j++) {
        ans_id.push_back(ids[i][j].second);
      }
    }
    while (ans_id.size() < m) {
      long long best = INF, who = -1;
      for (int i = 0; i <= 3; i++) {
        if (ptr[i] < book[i].size() && book[i][ptr[i]] < best) {
          best = book[i][ptr[i]];
          who = i;
        }
      }
      assert(best != INF);
      ans_id.push_back(ids[who][ptr[who]].second);
      ptr[who]++;
    }
    for (int i = 0; i < ans_id.size(); i++) {
      cout << ans_id[i] + 1 << " \n"[i + 1 == ans_id.size()];
    }
  }
}
