대회 문제 분배

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

세 명으로 이루어진 팀이 프로그래밍 대회에 참가하고 있다. 세 사람 모두 문제를 전부 읽었고, 각 문제를 자기가 푸는 데 몇 분이 걸릴지 따로 추정해 두었다. 이제 남은 시간 안에 팀이 푸는 문제 수가 가장 많아지도록 문제를 나눠 맡으려고 한다.

팀원 모두 풀이를 종이에 끝까지 적은 다음 컴퓨터 앞에 앉기 때문에 컴퓨터를 기다리는 시간은 생기지 않는다. 조건은 하나뿐이다. 각 팀원이 맡은 문제의 추정 풀이 시간을 모두 더한 값이 대회에 남은 시간을 넘으면 안 된다.

한 문제는 많아야 한 사람이 맡고, 어떤 팀원에게 그 사람이 풀지 못하는 문제를 맡길 수는 없다.

입력

첫 줄에 테스트 케이스의 개수 tt (1t1001 \le t \le 100)가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

  • 첫 줄에 문제 수 nn (1n101 \le n \le 10)과 대회에 남은 시간 mm (1m3001 \le m \le 300)이 분 단위로 주어진다.
  • 다음 세 줄에는 각각 정수 nn개가 주어진다. ii번째 줄은 ii번째 팀원의 풀이 시간이고, 그 줄의 jj번째 정수 sijs_{ij}는 그 팀원이 jj번 문제를 푸는 데 걸리는 시간 (1sij3001 \le s_{ij} \le 300)이다. 그 팀원이 그 문제를 풀지 못하면 1-1이다.

출력

각 테스트 케이스마다 팀이 풀 수 있는 문제 수의 최댓값을 한 줄에 출력한다.