import bisect

def main():
    import sys
    input = sys.stdin.read().split()
    idx = 0
    n, m = int(input[idx]), int(input[idx+1])
    idx += 2
    
    C1 = 0
    C2_ai_bi = []
    C3_ai_bi = []
    C4_ai_bi = []
    
    for _ in range(n):
        xi = int(input[idx])
        ai = int(input[idx+1])
        bi = int(input[idx+2])
        idx +=3
        if xi >=3:
            C1 +=1
        elif xi == 2:
            C2_ai_bi.append( (ai, bi) )
        elif xi ==1:
            C3_ai_bi.append( (ai, bi) )
        elif xi ==0:
            C4_ai_bi.append( (ai, bi) )
    
    C2_count = len(C2_ai_bi)
    total_C1C2 = C1 + C2_count
    if m <= total_C1C2:
        print(C1)
        return
    
    need = m - total_C1C2
    
    possible_SA = set()
    for ai, _ in C3_ai_bi:
        possible_SA.add(ai)
    for ai, _ in C4_ai_bi:
        possible_SA.add(ai)
    possible_SA = sorted(possible_SA)
    possible_SA.append(100001 +2)
    
    min_increment = float('inf')
    
    for SA_candidate in possible_SA:
        C3_a_list = []
        C3_not_a_bi = []
        for ai, bi in C3_ai_bi:
            if ai >= SA_candidate:
                C3_a_list.append(bi)
            else:
                C3_not_a_bi.append(bi)
        c3_a = len(C3_a_list)
        C4_a_bi = [bi for ai, bi in C4_ai_bi if ai >= SA_candidate]
        
        need_remaining = need - c3_a
        if need_remaining <=0:
            C2_a = sum(1 for ai, _ in C2_ai_bi if ai >= SA_candidate)
            increment = C2_a
            if increment < min_increment:
                min_increment = increment
            continue
        
        C3_not_a_sorted = sorted(C3_not_a_bi)
        C4_a_sorted = sorted(C4_a_bi)
        
        low = 0
        high = 100001
        best_x = -1
        while low <= high:
            mid = (low + high) //2
            cnt3 = len(C3_not_a_sorted) - bisect.bisect_left(C3_not_a_sorted, mid)
            cnt4 = len(C4_a_sorted) - bisect.bisect_left(C4_a_sorted, mid)
            if cnt3 + cnt4 >= need_remaining:
                best_x = mid
                low = mid +1
            else:
                high = mid -1
        if best_x == -1:
            continue
        
        C2_not_a_bi = [bi for ai, bi in C2_ai_bi if ai < SA_candidate]
        C2_not_a_sorted = sorted(C2_not_a_bi)
        cnt_c2_not_a = len(C2_not_a_sorted) - bisect.bisect_left(C2_not_a_sorted, best_x)
        
        C3_both_sorted = sorted(C3_a_list)
        cnt_c3_both = len(C3_both_sorted) - bisect.bisect_left(C3_both_sorted, best_x)
        
        C2_a = sum(1 for ai, _ in C2_ai_bi if ai >= SA_candidate)
        increment = C2_a + cnt_c2_not_a + cnt_c3_both
        
        if increment < min_increment:
            min_increment = increment
    
    if min_increment == float('inf'):
        print(-1)
    else:
        print(C1 + min_increment)

if __name__ == "__main__":
    main()