만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Animesh가 프로그래밍 대회 일부를 연습하는 문제

시간 제한1초메모리 제한1024 MB

요약
시간 제한 안에서 대회마다 문제를 하나씩만 고르고, 대회 사이 교환을 k번 이하로 사용해 얻는 최대 쾌락을 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

Malvika는 nn개의 프로그래밍 대회를 만들었다. 각 대회에는 쉬움, 보통, 어려움으로 나뉜 문제가 하나씩 있다. ii번째 대회의 쉬운 문제는 TEiTE_i시간이 걸리고 PEiPE_i만큼의 즐거움을 준다. 보통 문제는 TMiTM_i시간이 걸리고 PMiPM_i만큼의 즐거움을 준다. 어려운 문제는 THiTH_i시간이 걸리고 PHiPH_i만큼의 즐거움을 준다.

오늘 Animesh는 이 중 일부를 연습하려고 한다. 그는 문제를 몇 분만 풀어보고 Malvika에게 "I am a noob, you are a pro. It's some weird shit I don't know. Please, tell me the solution, bro!"라고 말하는 나쁜 버릇이 있다. 이런 행동에 여러 번 짜증이 난 Malvika는 연습을 시작하기 전에 쓸 수 있는 특수 능력 KK개를 그에게 주었다. 능력 하나로 Animesh는 서로 다른 두 대회에서 난이도와 관계없이 문제 두 개를 골라 서로 바꿀 수 있다.

Animesh는 좌절해서 연습을 끝내기 전까지 최대 timetime시간을 쓸 수 있다. 그 시간 안에서 최대한 많은 즐거움을 얻고 싶어 한다. 또한 대회 주제에 금방 싫증을 내서, 한 대회에서 문제를 두 개 이상 풀고 싶어 하지 않는다. Animesh가 얻을 수 있는 즐거움의 최댓값을 구하라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 공백으로 구분된 정수 nn, kk, timetime이 주어진다. 다음 nn줄에는 각각 공백으로 구분된 정수 TEiTE_i, TMiTM_i, THiTH_i가 주어진다. 그다음 nn줄에는 각각 공백으로 구분된 정수 PEiPE_i, PMiPM_i, PHiPH_i가 주어진다.

출력

각 테스트 케이스마다 답을 정수 하나로 한 줄에 출력한다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤n≤501 \le n \le 50
  • 0≤k≤n20 \le k \le n^2
  • 1≤time≤501 \le time \le 50
  • 1≤TEi,TMi,THi≤501 \le TE_i, TM_i, TH_i \le 50
  • 1≤PEi,PMi,PHi≤1000001 \le PE_i, PM_i, PH_i \le 100000

힌트

첫 번째 예시에서 Malvika는 대회를 하나만 준비했다. 그 쉬운 문제는 1시간이 걸리고 즐거움 5를 준다. 보통 문제는 2시간이 걸리고 즐거움 3을 준다. 어려운 문제는 3시간이 걸리고 즐거움 6을 준다. Animesh에게는 5시간뿐이고, 이 중 최대 한 문제만 풀 수 있다. 어려운 문제가 5시간 안에 즐거움 6을 주므로 가장 좋은 선택이다. 따라서 답은 6이다.

두 번째 예시에서 Malvika는 대회를 두 개 준비했다.

첫 번째 대회: 쉬운 문제는 1시간에 2, 보통 문제는 2시간에 3, 어려운 문제는 1시간에 3을 준다.

두 번째 대회: 쉬운 문제는 2시간에 4, 보통 문제는 3시간에 6, 어려운 문제는 3시간에 5를 준다.

Animesh에게는 6시간이 있고 특수 능력은 최대 한 번 쓸 수 있다. 두 번째 대회의 보통 문제를 첫 번째 대회의 아무 문제와 바꾼다. 그러면 3시간짜리 문제 두 개를 고를 수 있고, 즐거움 6과 5를 얻어 합계 11이 된다.

예제1

  1. 예제 1

    입력
    2
    1 0 5
    1 2 3
    5 3 6
    2 1 6
    1 2 1
    2 3 3
    5 3 3
    4 6 5
    
    예상 출력
    6
    11