#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int t[N], a[N], b[N];
int main() {
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  int cnta = 0, cntb = 0;
  vector<pair<int, int> > v1, v2, v3, v0;
  for (int i = 0; i < n; i++) {
    scanf("%d %d %d", &t[i], &a[i], &b[i]);
    if (a[i] == 1) cnta++;
    if (b[i] == 1) cntb++;
    if (a[i] == 1 && b[i] == 0) {
      v1.push_back({t[i], i + 1});
    } else if (a[i] == 0 && b[i] == 1) {
      v2.push_back({t[i], i + 1});
    } else if (a[i] == 1 && b[i] == 1) {
      v3.push_back({t[i], i + 1});
    }
    v0.push_back({t[i], i + 1});
  }
  if (cnta < k || cntb < k) {
    return printf("-15"), 0;
  }
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());
  sort(v3.begin(), v3.end());
  sort(v0.begin(), v0.end());
  cnta = 0, cntb = 0;
  int res = 0, idx1 = 0, idx2 = 0, idx3 = 0, sz1 = v1.size(), sz2 = v2.size(),
      sz3 = v3.size();
  set<int> st;
  while (cnta < k) {
    if (idx1 < sz1 && idx3 < sz3) {
      if (v1[idx1].first < v3[idx3].first) {
        st.insert(v1[idx1].second);
        res += v1[idx1++].first;
      } else {
        st.insert(v3[idx3].second);
        res += v3[idx3++].first;
        cntb++;
      }
    } else if (idx1 < sz1) {
      st.insert(v1[idx1].second);
      res += v1[idx1++].first;
    } else {
      st.insert(v3[idx3].second);
      res += v3[idx3++].first;
      cntb++;
    }
    cnta++;
  }
  m -= k;
  while (cntb < k && m) {
    if (idx2 < sz2 && idx3 < sz3) {
      int temp = v3[idx3].first;
      if (idx1 > 0) {
        temp -= v1[idx1 - 1].first;
      }
      if (v2[idx2].first < temp) {
        st.insert(v2[idx2].second);
        res += v2[idx2++].first;
        m--;
      } else {
        st.insert(v3[idx3].second);
        if (idx1 > 0) {
          st.erase(v1[idx1 - 1].second);
          idx1--;
        } else {
          m--;
          cnta++;
        }
        res += temp;
        idx3++;
      }
    } else if (idx2 < sz2) {
      st.insert(v2[idx2].second);
      res += v2[idx2++].first;
      m--;
    } else if (idx3 < sz3) {
      int temp = v3[idx3].first;
      st.insert(v3[idx3].second);
      if (idx1 > 0) {
        temp -= v1[idx1 - 1].first;
        st.erase(v1[idx1 - 1].second);
        idx1--;
      } else {
        m--;
        cnta++;
      }
      idx3++;
      res += temp;
    } else {
      return printf("-14"), 0;
    }
    cntb++;
  }
  printf("%d\n", m);
  if (cntb < k) {
    if (cnta > k) return printf("-13"), 0;
    while (cntb < k && idx1) {
      res -= v1[idx1 - 1].first;
      st.erase(v1[idx1 - 1].second);
      idx1--;
      if (cnta > k) {
        if (idx2 < sz2 && idx3 < sz3) {
          if (v2[idx2].first < v3[idx3].first) {
            st.insert(v2[idx2].second);
            res += v2[idx2++].first;
            cnta--;
          } else {
            st.insert(v3[idx3].second);
            res += v3[idx3++].first;
          }
        } else if (idx2 < sz2) {
          st.insert(v2[idx2].second);
          res += v2[idx2++].first;
          cnta--;
        } else if (idx3 < sz3) {
          st.insert(v3[idx3].second);
          res += v3[idx3++].first;
        } else {
          return printf("-1"), 0;
        }
      } else {
        if (idx3 < sz3) {
          st.insert(v3[idx3].second);
          res += v3[idx3++].first;
        } else {
          return printf("-1"), 0;
        }
      }
      cntb++;
    }
    if (cntb < k) return printf("-1"), 0;
  }
  for (auto x : v0) {
    if (m == 0) break;
    if (st.count(x.second)) continue;
    res += x.first;
    st.insert(x.second);
    m--;
  }
  if (m) return printf("-12"), 0;
  printf("%d\n", res);
  for (auto x : st) {
    printf("%d ", x);
  }
  return 0;
}
