#include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 5;   struct node {     int tim, a, b, id;     bool operator<(const node& aa) const { return tim < aa.tim; }   } a[N];   deque<node> s[5], rt[5];   int vis[N];   vector<int> ad, de;   int main() {     int n, m, k;     scanf( %d%d%d , &n, &m, &k);     for (int i = 1; i <= n; i++)       scanf( %d%d%d , &a[i].tim, &a[i].a, &a[i].b), a[i].id = i;     sort(a + 1, a + 1 + n);     int na = 0, nb = 0, ans = 2e9;     for (int i = 1; i <= n; i++) {       int ne = 0;       if (a[i].a) ne |= 1;       if (a[i].b) ne |= 2;       rt[ne].push_back(a[i]);     }     int sum = 0;     int x = (int)rt[1].size(), y = (int)rt[2].size();     int mi = min(x, y);     if ((int)rt[3].size() + min(mi, (m - (int)rt[3].size()) / 2) < k)       return 0 * printf( -1 n );     while (s[3].size() + min(mi, (m - (int)s[3].size()) / 2) < k ||            s[3].size() + rt[1].size() + rt[2].size() + rt[0].size() < m) {       s[3].push_back(rt[3].front());       sum += rt[3].front().tim;       vis[rt[3].front().id] = 1;       rt[3].pop_front();     }     int ned = k - s[3].size();     for (int i = 1; i <= ned; i++) {       s[2].push_back(rt[2].front());       sum += rt[2].front().tim;       vis[rt[2].front().id] = 1;       rt[2].pop_front();       s[1].push_back(rt[1].front());       sum += rt[1].front().tim;       vis[rt[1].front().id] = 1;       rt[1].pop_front();     }     int res = m - s[3].size() - max(0, 2 * (k - (int)s[3].size()));     for (int i = 1; i <= res; i++) {       int add = -1;       if (rt[0].size()) add = 0;       if (rt[1].size() && (add == -1 || rt[add].front().tim > rt[1].front().tim))         add = 1;       if (rt[2].size() && (add == -1 || rt[add].front().tim > rt[2].front().tim))         add = 2;       s[add].push_back(rt[add].front());       sum += rt[add].front().tim;       vis[rt[add].front().id] = 1;       rt[add].pop_front();     }     ans = sum;     for (; rt[3].size() && s[3].size() < m;) {       sum = ans;       ad.clear(), de.clear();       s[3].push_back(rt[3].front());       ad.push_back(rt[3].front().id);       sum += rt[3].front().tim;       rt[3].pop_front();       int num = 0;       if (s[2].size()) {         rt[2].push_front(s[2].back());         de.push_back(s[2].back().id);         sum -= s[2].back().tim;         s[2].pop_back();         num++;       }       if (s[1].size()) {         rt[1].push_front(s[1].back());         de.push_back(s[1].back().id);         sum -= s[1].back().tim;         s[1].pop_back();         num++;       }       if (s[0].size()) {         rt[0].push_front(s[0].back());         de.push_back(s[0].back().id);         sum -= s[0].back().tim;         s[0].pop_back();         num++;       }       while (num > 1) {         int add = -1;         if (rt[0].size()) add = 0;         if (rt[1].size() &&             (add == -1 || rt[add].front().tim > rt[1].front().tim))           add = 1;         if (rt[2].size() &&             (add == -1 || rt[add].front().tim > rt[2].front().tim))           add = 2;         s[add].push_back(rt[add].front());         sum += rt[add].front().tim;         ad.push_back(rt[add].front().id);         rt[add].pop_front();         num--;       }       if (sum < ans) {         for (int i : ad) vis[i]++;         for (int i : de) vis[i]--;         ans = sum;       }     }     printf( %d n , ans);     for (int i = 1; i <= n; i++)       if (vis[i]) printf( %d  , i);     printf(  n );     return 0;   }