import java.io.*;import java.util.*;import java.math.*;
public class Main
{
	static long mod=1000000007l;
    static int max=Integer.MAX_VALUE,min=Integer.MIN_VALUE;
    static long maxl=Long.MAX_VALUE,minl=Long.MIN_VALUE;
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    
    
    static public void main(String[] args)throws Exception
    {	
    	st=new StringTokenizer(br.readLine());
    	int n=i();
    	int m=i();
    	int k=i();
    	int ar[][]=ari(n,3);
    	Integer a[][]=new Integer[n][2];
    	Integer b[][]=new Integer[n][2];
    	Integer c[][]=new Integer[n][2];
    	Integer dd[][]=new Integer[n][2];
    	for(int x=0;x<n;x++)a[x][0]=b[x][0]=c[x][0]=dd[x][0]=1000000;
    	int i=-1;
    	int j=-1;
    	int kk=-1;
    	int kkk=-1;
    	int c1=0;
    	int c2=0;
    	int ii=0;
    	for(int q[]:ar)
    	{
    		ii++;
    		Integer qq[]=new Integer[2];
    		qq[0]=q[0];
    		qq[1]=ii;
    		if((q[1]==1&&q[2]==1))
    		{
    			
    			
    			c[++kk]=qq;
    			c1++;
    			c2++;
    		}
    		else if(q[1]==1&&q[2]==0)
    		{
    			a[++i]=qq;
    			c1++;
    		}
    		else if(q[1]==0&&q[2]==1)
    		{
    			b[++j]=qq;
    			c2++;
    		}
    		else
    		{
    			dd[++kkk]=qq;
    		}
    	}
    	if(c1<k||c2<k)pl(-1);
    	else
    	{
    		try {
    		Arrays.sort(c,(aa,bb)->(aa[0]-bb[0]));
    		Arrays.sort(a,(aa,bb)->(aa[0]-bb[0]));
    		Arrays.sort(b,(aa,bb)->(aa[0]-bb[0]));
    		Arrays.sort(dd,(aa,bb)->(aa[0]-bb[0]));
//    		pl(Arrays.toString(a));
//    		pl(Arrays.toString(b));
//    		pl(Arrays.toString(c));
    		i=0;
    		j=0;
    		int de=0;
    		kk=0;
    		c1=k;
    		c2=k;
    		int bb[]=new int[m];
    		int p=0;
    		int jj=-1;
    		long cc=0l;
    		while(c1>0&&c2>0)
    		{
    			//jj++;
	    		if(a[i][0]+b[i][0]>=c[kk][0]||p==m-1)
	    		{
	    			cc+=c[kk][0];
	    			//pl("   "+kk);
	    			bb[++jj]=c[kk++][1];
	    			p++;
	    		}
	    		else
	    		{
	    			//pl(jj+" "+p);
	    			cc+=a[i][0]+b[i][0];
	    			bb[++jj]=a[i][1];
	    			bb[++jj]=b[i++][1];
	    			p+=2;
	    		}
	    		c1--;
    			c2--;
    			//p++;
    		//	pl(cc);
    		}
    		while(c1>0)
    		{
    			if(a[i][0]>=c[kk][0])
    			{
    				bb[++jj]=c[kk][1];
    				cc+=c[kk++][0];
    			}
	    		else 
	    			{
	    			bb[++jj]=a[i][1];
	    			cc+=a[i++][0];
	    			}
	    		c1--;
	    		p++;
    		}
    		if(c2>0)
    		{
    			j=i;
    		while(c2>0)
    		{
    			
    			if(b[j][0]>=c[kk][0])
    				
    			{
    				bb[++jj]=c[kk][1];
    				cc+=c[kk++][0];
    				}
	    		else 
	    		{
	    			bb[++jj]=b[j][1];
	    			cc+=b[j++][0];
	    		}
	    		c2--;
	    		p++;
    		}
    		}
    		p=m-p;
    		if(p<0)
    		{
    			pl(-1);
    			System.exit(0);
    		}
    	//	p(jj+" "+p);
    		
    		while(p>0)
    		{
    			PriorityQueue<Integer[]> pp=new PriorityQueue<>(4,(aa,bbb)->aa[0]-bbb[0]);
    			pp.add(c[kk]);
    			pp.add(a[i]);
    			pp.add(b[j]);
    			pp.add(dd[de]);
    			Integer w[]=pp.poll();
    			bb[++jj]=w[1];
    			if(w[0]==c[kk][0])kk++;
    			else if(w[0]==a[i][0])i++;
    			else if(w[0]==b[j][0])j++;
    			else de++;
    			p--;
    		}
    		p(bb);
    		}
    		catch(Exception e){pl(-1);}
    	}
    	
    }
    
    static int max(int a,int b){return a>b?a:b;}
    static int min(int a,int b){return a<b?a:b;}
    static int abs(int a){return Math.abs(a);}
    static long max(long a,long b){return a>b?a:b;}
    static long min(long a,long b){return a<b?a:b;}
    static long abs(long a){return Math.abs(a);}
    static int sq(int a){return (int)Math.sqrt(a);}
    static long sq(long a){return (long)Math.sqrt(a);}
    static int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
//    static void g(int i)
//    {
//    	for(int e:ar[i])
//    	{
//    		if(e==i)continue;
//    		al[i].add(e);
//    		g(e);
//    	}
//    }
    static boolean pa(String s,int i,int j)
    {
    	while(i<j)if(s.charAt(i++)!=s.charAt(j--))return false;
    	return true;
    }
    static int ncr(int n,int c,long m)
    {
        long a=1l;
        for(int x=n-c+1;x<=n;x++)a=((a*x)%m);
        long b=1l;
        for(int x=2;x<=c;x++)b=((b*x)%m);
        return (int)((a*(div((int)b,m-2,m)%m))%m);
    }
    static boolean[] sieve(int n)
    {
        boolean bo[]=new boolean[n+1];
        bo[0]=true;bo[1]=true;
        for(int x=4;x<=n;x+=2)bo[x]=true;
        for(int x=3;x*x<=n;x+=2)if(!bo[x])for(int y=x*x;y<=n;y+=x)bo[y]=true;
        return bo;
    }
    static int[] fac(int n)
    {
        int bo[]=new int[n+1];
        for(int x=1;x<=n;x++)for(int y=x;y<=n;y+=x)bo[y]++;
        return bo;
    }
    static long div(long a,long b,long m) 
    {
        long r=1l;
        a%=m;  
        while(b>0)
        {
            if((b&1)==1)r=(r*a)%m; 
            b>>=1;
            a=(a*a)%m;  
        } 
        return r; 
    }
    static int i()throws IOException
    {
        if(!st.hasMoreTokens()) st=new StringTokenizer(br.readLine());
        return Integer.parseInt(st.nextToken());
    }
    static long l()throws IOException
    {
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        return Long.parseLong(st.nextToken());
    }
    static String s()throws IOException
    {
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        return st.nextToken();
    }
    static double d()throws IOException
    {
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        return Double.parseDouble(st.nextToken());
    }
    static void p(Object p){System.out.print(p);}
    static void p(String p){System.out.print(p);}
    static void p(int p){System.out.print(p);}
    static void p(double p){System.out.print(p);}
    static void p(long p){System.out.print(p);}
    static void p(char p){System.out.print(p);}
    static void p(boolean p){System.out.print(p);}
    static void pl(Object p){System.out.println(p);}
    static void pl(String p){System.out.println(p);}
    static void pl(int p){System.out.println(p);}
    static void pl(char p){System.out.println(p);}
    static void pl(double p){System.out.println(p);}
    static void pl(long p){System.out.println(p);}
    static void pl(boolean p){System.out.println(p);}
    static void pl(){System.out.println();}
    static int[] ari(int n)throws IOException
    {
        int ar[]=new int[n];
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        for(int x=0;x<n;x++)ar[x]=Integer.parseInt(st.nextToken());
        return ar;
    }
    static int[][] ari(int n,int m)throws IOException
    {
        int ar[][]=new int[n][m];
        for(int x=0;x<n;x++)
        {
        	if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
            for(int y=0;y<m;y++)ar[x][y]=Integer.parseInt(st.nextToken());
        }
        return ar;
    }
    static long[] arl(int n)throws IOException
    {
        long ar[]=new long[n];
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        for(int x=0;x<n;x++) ar[x]=Long.parseLong(st.nextToken());
        return ar;
    }
    static long[][] arl(int n,int m)throws IOException
    {
        long ar[][]=new long[n][m];
        for(int x=0;x<n;x++)
        {
        	if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
            for(int y=0;y<m;y++)ar[x][y]=Long.parseLong(st.nextToken());
        }
        return ar;
    }
    static String[] ars(int n)throws IOException
    {
        String ar[]=new String[n];
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        for(int x=0;x<n;x++) ar[x]=st.nextToken();
        return ar;
    }
    static double[] ard(int n)throws IOException
    {
        double ar[]=new double[n];
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        for(int x=0;x<n;x++)ar[x]=Double.parseDouble(st.nextToken());
        return ar;
    }
    static double[][] ard(int n,int m)throws IOException
    {
        double ar[][]=new double[n][m];
        for(int x=0;x<n;x++)
        {
        	if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
            for(int y=0;y<m;y++)ar[x][y]=Double.parseDouble(st.nextToken());
        }
        return ar;
    }
    static char[] arc(int n)throws IOException
    {
        char ar[]=new char[n];
        if(!st.hasMoreTokens())st=new StringTokenizer(br.readLine());
        for(int x=0;x<n;x++)ar[x]=st.nextToken().charAt(0);
        return ar;
    }
    static char[][] arc(int n,int m)throws IOException
    {
        char ar[][]=new char[n][m];
        for(int x=0;x<n;x++)
        {
            String s=br.readLine();
            for(int y=0;y<m;y++)ar[x][y]=s.charAt(y);
        }
        return ar;
    }
    static void p(int ar[])
    {
        StringBuilder sb=new StringBuilder(11*ar.length);
        for(int a:ar)
        {
        	sb.append(a);
        	sb.append(' ');
        }
        System.out.println(sb);
    }
    static void p(int ar[][])
    {
        StringBuilder sb;
        for(int a[]:ar)
        {
            sb=new StringBuilder(2*a.length);
            for(int aa:a)
            {
            	sb.append(aa);
            	sb.append(' ');
            }
            System.out.println(sb);
        }
    }
    static void p(long ar[])
    {
        StringBuilder sb=new StringBuilder(20*ar.length);
        for(long a:ar)
        {
        	sb.append(a);
        	sb.append(' ');
        }
        System.out.println(sb);
    }
    static void p(long ar[][])
    {
        StringBuilder sb;
        for(long a[]:ar)
        {
            sb=new StringBuilder(2*a.length);
            for(long aa:a)
            {
            	sb.append(aa);
            	sb.append(' ');
            }
            System.out.println(sb);
        }
    }
    static void p(String ar[])
    {
        StringBuilder sb=new StringBuilder(2*ar.length);
        for(String a:ar)
        {
        	sb.append(a);
        	sb.append(' ');
        }
        System.out.println(sb);
    }
    static void p(double ar[])
    {
        StringBuilder sb=new StringBuilder(20*ar.length);
        for(double a:ar)
        {
        	sb.append(a);
        	sb.append(' ');
        }
        System.out.println(sb);
    }
    static void p(double ar[][])
    {
        StringBuilder sb;
        for(double a[]:ar)
        {
            sb=new StringBuilder(4*a.length);
            for(double aa:a)
            {
            	sb.append(aa);
            	sb.append(' ');
            }
            System.out.println(sb);
        }
    }
    static void p(char ar[])
    {
        StringBuilder sb=new StringBuilder(2*ar.length);
        for(char aa:ar)
        {
        	sb.append(aa);
        	sb.append(' ');
        }
        System.out.println(sb);
    }
    static void p(char ar[][])
    {
        StringBuilder sb;
        for(char a[]:ar)
        {
            sb=new StringBuilder(2*a.length);
            for(char aa:a)
            {
            	sb.append(aa);
            	sb.append(' ');
            }
            System.out.println(sb);
        }
    }
}