#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  if (fopen("GUARDS.INP", "r")) {
    freopen("GUARDS.INP", "r", stdin);
    freopen("GUARDS.OUT", "w", stdout);
  }
  long long n, m, k;
  cin >> n >> m >> k;
  priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
                 greater<pair<long long, long long>>>
      pq01, pq10, pq00, pq11;
  priority_queue<pair<long long, long long>> need;
  long long ans = 0;
  long long cnt = 0;
  long long now = 0;
  for (int i = 1; i <= n; i++) {
    long long t, a, b;
    cin >> t >> a >> b;
    if (a == 1 && b == 1) {
      pq11.push({t, i});
    } else if (a == 1 && b == 0) {
      pq10.push({t, i});
    } else if (a == 0 && b == 1) {
      pq01.push({t, i});
    } else {
      pq00.push({t, i});
    }
  }
  while (cnt < k && pq11.size() > 0) {
    need.push(pq11.top());
    cnt++;
    ans += pq11.top().first;
    now++;
    pq11.pop();
  }
  vector<long long> ok;
  for (int i = cnt + 1; i <= k; i++) {
    if (pq01.size() == 0 || pq10.size() == 0) {
      cout << -1;
      return 0;
    }
    ans += pq10.top().first + pq01.top().first;
    ok.push_back(pq01.top().second);
    ok.push_back(pq10.top().second);
    pq01.pop();
    pq10.pop();
    now += 2;
  }
  while (need.size() > 0 && pq10.size() > 0 && pq01.size() && now < m) {
    if (pq00.size()) {
      if ((pq10.top().first + pq01.top().first) >
          (pq00.top().first + need.top().first)) {
        ok.push_back(pq00.top().second);
        pq00.pop();
        continue;
      }
    }
    if ((pq10.top().first + pq01.top().first) < need.top().first) {
      pq11.push({need.top()});
      ans = ans + pq10.top().first + pq01.top().first - need.top().first;
      ok.push_back(pq01.top().second);
      ok.push_back(pq10.top().second);
      now++;
      pq01.pop();
      pq10.pop();
      need.pop();
    } else {
      break;
    }
  }
  while (now < m) {
    long long mx = 1e9;
    if (pq11.size())
      if (mx > pq11.top().first) mx = pq11.top().first;
    if (pq01.size())
      if (mx > pq01.top().first) mx = pq01.top().first;
    if (pq10.size())
      if (mx > pq10.top().first) mx = pq10.top().first;
    if (pq00.size())
      if (mx > pq00.top().first) mx = pq00.top().first;
    if (pq11.size())
      if (mx == pq11.top().first) {
        ok.push_back(pq11.top().second);
        ans += mx;
        pq11.pop();
        now++;
        continue;
      }
    if (pq01.size())
      if (mx == pq01.top().first) {
        ok.push_back(pq01.top().second);
        ans += mx;
        pq01.pop();
        now++;
        continue;
      }
    if (pq10.size())
      if (mx == pq10.top().first) {
        ok.push_back(pq10.top().second);
        ans += mx;
        pq10.pop();
        now++;
        continue;
      }
    if (pq00.size())
      if (mx == pq00.top().first) {
        ok.push_back(pq00.top().second);
        ans += mx;
        pq00.pop();
        now++;
        continue;
      }
    break;
  }
  if (now != m) {
    cout << -1;
    return 0;
  }
  while (need.size()) {
    ok.push_back(need.top().second);
    need.pop();
  }
  cout << ans << '\n';
  for (auto j : ok) cout << j << " ";
}
