
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Reading_Books_easy_version {
    static List<Integer>t=new ArrayList<>();
    static List<Integer>a=new ArrayList<>();
    static List<Integer>b=new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int k=sc.nextInt();
        int c=0;
        for (int i=0;i<n;i++){
            int ti=sc.nextInt(),ai=sc.nextInt(),bi=sc.nextInt();
            if (!(ai==0&&bi==0)){
                t.add(ti);a.add(ai);b.add(bi);
           }
        }
        sort(0,t.size()-1);
        System.out.println(min(k));

    }
        static void merge(int l, int m, int r) {
            // Find sizes of two subarrays to be merged
            int n1 = m - l + 1;
            int n2 = r - m;

            /* Create temp arrays */
            int L[] = new int[n1];
            int R[] = new int[n2];
            int al[]=new int[n1];
            int ar[] = new int[n2];
            int bl[]=new int[n1];
            int br[] = new int[n2];
            /*Copy data to temp arrays*/
            for (int i = 0; i < n1; ++i){
                al[i]=a.get(l + i);
                bl[i]=b.get(l + i);
                L[i] = t.get(l + i);}
            for (int j = 0; j < n2; ++j){
                ar[j]=a.get(m + 1 + j);
                br[j]=b.get(m + 1 + j);
                R[j] = t.get(m + 1 + j);}

            /* Merge the temp arrays */

            // Initial indexes of first and second subarrays
            int i = 0, j = 0;

            // Initial index of merged subarry array
            int k = l;
            while (i < n1 && j < n2) {
                if (L[i] <= R[j]) {
                    t.add(k,L[i]);
                    t.remove(k+1);
                    a.add(k,al[i]);
                    a.remove(k+1);
                    b.add(k,bl[i]);
                    b.remove(k+1);
                    i++;
                } else {
                    t.add(k,R[j]);
                    t.remove(k+1);
                    a.add(k,ar[j]);
                    a.remove(k+1);
                    b.add(k,br[j]);
                    b.remove(k+1);
                    j++;
                }
                k++;
            }

            /* Copy remaining elements of L[] if any */
            while (i < n1) {
                t.add(k,L[i]);
                t.remove(k+1);
                a.add(k,al[i]);
                a.remove(k+1);
                b.add(k,bl[i]);
                b.remove(k+1);
                i++;
                k++;
            }

            /* Copy remaining elements of R[] if any */
            while (j < n2) {
                t.add(k,R[j]);
                t.remove(k+1);
                a.add(k,ar[j]);
                a.remove(k+1);
                b.add(k,br[j]);
                b.remove(k+1);
                j++;
                k++;
            }
        }

        // Main function that sorts arr[l..r] using
        // merge()
        static void sort(int l, int r) {
            if (l < r) {
                // Find the middle point
                int m = (l + r) / 2;

                // Sort first and second halves
                sort( l, m);
                sort( m + 1, r);

                // Merge the sorted halves
                merge(l, m, r);
            }
        }
        // Driver method

       static int min(int k) {
            int tot = 0, ak = 0, bk = 0;
            int i = 0;
            List<Integer> noones = new ArrayList<>();
            while (ak < k && bk < k && i < a.size()) {
                if (!(a.get(i) == 1 && b.get(i) == 1)) {
                    noones.add(i);
                }
                tot += t.get(i);
                ak += a.get(i);
                bk += b.get(i++);
            }
            while (ak <= k && i < a.size()) {
                if (a.get(i) == 1 && b.get(i) == 1) {
                    int ind = 0;
                    for (int j = noones.size() - 1; j >= 0; j--) {
                        if (b.get(j) == 1) {
                            ind = j;
                            break;
                        }
                    }
                    tot -= t.get(noones.get(ind));
                    noones.remove(ind);

                    tot += t.get(i);
                    ak++;
                } else if (a.get(i) == 1) {
                    tot += t.get(i);
                    ak++;
                }
                i++;
            }
            while (bk <= k && i < b.size()) {
                if (a.get(i) == 1 && b.get(i) == 1) {
                    int ind = 0;
                    for (int j = noones.size() - 1; j >= 0; j--) {
                        if (a.get(j) == 1) {
                            ind = j;
                            break;
                        }
                    }
                    tot -= t.get(noones.get(ind));
                    noones.remove(ind);

                    tot += t.get(i);
                    bk++;
                } else if (b.get(i) == 1) {
                    tot += t.get(i);
                    bk++;
                }
                i++;
            }
            if (ak < k || bk < k)
                return -1;
            return tot;
        }


    }