근무 중 수면

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

문제

회사에서 근무하는 중인데, 퇴근하자마자 프로그래밍 대회가 열린다. 좋은 성적을 내려면 근무 시간에 잠을 자서 체력을 최대한 회복해야 한다.

근무 시간은 NN분이고, 0i<N0 \le i < Nii에 대해 ii번 분의 회복량은 eie_i다. 자야 하는 시간은 정확히 MM분이다. 다만 한 번에 RR분을 넘겨 자면 상사가 알아채므로, 이어서 자는 구간의 길이는 최대 RR분이다. 서로 다른 두 수면 구간 사이에는 깨어 있는 분이 적어도 하나 있다. 두 구간이 붙어 있으면 하나의 긴 구간이다.

이어서 자면 보너스가 붙는다. 한 구간에서 kk번째로 자는 분은 회복량이 kk배가 된다. 예를 들어 회복량이 10,10,910, 10, 9인 세 분을 이어서 자면 10+2×10+3×9=5710 + 2 \times 10 + 3 \times 9 = 57만큼 회복한다.

MM분을 다 자면 완전히 회복되어 그날은 더 잘 수 없다. 잠은 시계의 분이 바뀌는 순간에만 시작하고 끝낼 수 있다.

하루 동안 회복할 수 있는 체력의 최댓값을 구하는 프로그램을 작성하라.

입력

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

각 테스트 케이스의 첫 줄에는 근무 시간 NN, 자야 하는 시간 MM, 한 번에 이어서 잘 수 있는 최대 시간 RR이 공백으로 구분되어 주어진다. 둘째 줄에는 NN개의 정수 e0,e1,,eN1e_0, e_1, \dots, e_{N-1}이 공백으로 구분되어 주어진다.

  • 0<T1000 < T \le 100
  • 0<N5000 < N \le 500
  • 0<M500 < M \le 50
  • 0<R500 < R \le 50
  • 0ei1000 \le e_i \le 100

출력

각 테스트 케이스마다 한 줄에, 정확히 MM분을 자서 얻을 수 있는 회복량의 최댓값을 출력한다. MM분을 자는 것이 불가능하면 impossible을 출력한다.