#include <bits/stdc++.h>
int main() {
  int n, k, m;
  std::cin >> n >> m >> k;
  std::vector<std::vector<int>> v(n, std::vector<int>(3));
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 3; j++) std::cin >> v[i][j];
  std::list<int> v_2[2][2];
  for (int i = 0; i < n; i++) v_2[v[i][1]][v[i][2]].push_back(i);
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      v_2[i][j].sort([&v](int i1, int j1) { return v[i1][0] < v[j1][0]; });
    }
  }
  int k_actual = 0;
  int m_actual = 0;
  std::list<int> v_actual[2][2];
  while (k_actual < k &&
         (v_2[1][1].size() || (v_2[1][0].size() && v_2[0][1].size()))) {
    int tt_val = INT_MAX;
    int tf_ft_val = INT_MAX;
    if (v_2[1][1].size()) tt_val = v[v_2[1][1].front()][0];
    if (v_2[1][0].size() && v_2[0][1].size())
      tf_ft_val = v[v_2[1][0].front()][0] + v[v_2[0][1].front()][0];
    if (tt_val <= tf_ft_val) {
      v_actual[1][1].push_back(v_2[1][1].front());
      m_actual++;
      v_2[1][1].pop_front();
    } else {
      v_actual[1][0].push_back(v_2[1][0].front());
      v_actual[0][1].push_back(v_2[0][1].front());
      m_actual += 2;
      v_2[1][0].pop_front();
      v_2[0][1].pop_front();
    }
    k_actual++;
  }
  while (m_actual > m && v_actual[1][0].size() && v_actual[0][1].size() &&
         v_2[1][1].size()) {
    v_actual[1][0].pop_back();
    v_actual[0][1].pop_back();
    m_actual -= 2;
    k_actual--;
    v_actual[1][1].push_back(v_2[1][1].front());
    v_2[1][1].pop_front();
    m_actual++;
    k_actual++;
  }
  while (m_actual < m && (v_2[1][0].size() || v_2[0][1].size() ||
                          v_2[1][1].size() || v_2[0][0].size())) {
    int pos_i, pos_j = 0;
    int min_val = INT_MAX;
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 2; j++)
        if (v_2[i][j].size() && min_val > v[v_2[i][j].front()][0]) {
          pos_i = i;
          pos_j = j;
          min_val = v[v_2[i][j].front()][0];
        }
    int pos_i2, pos_j2 = 0;
    if (v_2[0][1].size() && v_2[1][0].size() && v_actual[1][1].size() &&
        v[v_2[0][1].front()][0] + v[v_2[1][0].front()][0] -
                v[v_actual[1][1].back()][0] <=
            min_val) {
      v_actual[0][1].push_back(v_2[0][1].front());
      v_actual[1][0].push_back(v_2[1][0].front());
      v_2[0][1].pop_front();
      v_2[1][0].pop_front();
      m_actual += 2;
      v_2[1][1].push_front(v_actual[1][1].back());
      v_actual[1][1].pop_back();
      m_actual -= 1;
    } else {
      v_actual[pos_i][pos_j].push_back(v_2[pos_i][pos_j].front());
      v_2[pos_i][pos_j].pop_front();
      m_actual++;
    }
  }
  if (k_actual < k || m_actual != m) {
    std::cout << "-1" << '\n';
  } else {
    long long min_val = 0;
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 2; j++)
        for (auto& x : v_actual[i][j]) min_val += v[x][0];
    std::cout << min_val << '\n';
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 2; j++)
        while (v_actual[i][j].size()) {
          std::cout << v_actual[i][j].front() + 1 << " ";
          v_actual[i][j].pop_front();
        }
    std::cout << '\n';
  }
}
