import java.io.*;
import java.util.*;

public class E{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        // Integer b[][] = new Integer[N][3];
        PriorityQueue<Integer> pq11 = new PriorityQueue<Integer>();
        PriorityQueue<Integer> pq01 = new PriorityQueue<Integer>();
        PriorityQueue<Integer> pq10 = new PriorityQueue<Integer>();
        for(int i = 0; i<N; ++i){
            st = new StringTokenizer(br.readLine());
            int t = Integer.parseInt(st.nextToken());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            if(a==1 && b==1){
                pq11.add(t);
            }else if(a==0 && b==1){
                pq01.add(t);
            }else if(a==1 && b==0){
                pq10.add(t);
            }
        }
        int tot = 0;
        boolean f = false;
        for(int i = 0; i<k && !f; ++i){
            if((pq11.isEmpty() && pq01.isEmpty() && pq10.isEmpty()) || 
                (pq11.isEmpty() && (pq10.size()!=pq01.size() || pq10.size()+pq01.size()==0))){
                    f = true;
                    continue;
            }
            if(pq11.isEmpty()){
                tot+=pq01.poll()+pq10.poll();
            }else{
                if(pq01.isEmpty()||pq10.isEmpty()){
                    tot+=pq11.poll();
                }else{
                    int tmp = pq01.peek()+pq10.peek();
                    if(pq11.peek()>tmp){
                        tot+=tmp;
                        pq01.poll();
                        pq10.poll();
                    }else{
                        tot+=pq11.poll();
                    }
                }
            }
        }

        System.out.println(f?-1:tot);
        // Arrays.sort(b, (x, y)->{
        //     if(x[0]==y[0])
        //         return -(x[1]+x[2])+(y[1]+y[2]);
        //     return x[0]-y[0];
        // });
        // for(int i = 0; )
        // int ka = k, kb = k;
        // int tot = 0, idx = 0;
        // boolean f = false;
        // while(ka>0 || kb>0){
        //     if(idx==N){
        //         f = true;
        //         break;
        //     }
        //     if(b[idx][1]==0 && b[idx][2]==0){
        //         idx++;
        //         continue;
        //     }
        //     if(ka<=0){
        //         if(b[idx][2]==0){
        //             idx++;
        //             continue;
        //         }
        //     }else if(kb<=0){
        //         if(b[idx][1]==0){
        //             idx++;
        //             continue;
        //         }
        //     }
        //     System.out.println("---"+b[idx][0]+" "+b[idx][1]+" "+b[idx][2]);
        //     tot+=b[idx][0];
        //     ka-=b[idx][1];
        //     kb-=b[idx][2];
        //     idx++;
        // }

        // System.out.println(f?-1:tot);
    }
}