칼로리 섭취 계획

시간당 코스 n개의 칼로리가 주어질 때, 섭취 한도가 m에서 시작해 먹는 동안 3분의 2로 줄고 두 시간을 거르면 초기화되는 규칙 아래 최대로 먹을 수 있는 칼로리를 구한다.

보통6동적 계획법그리디수학구현면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

스탠은 대학원생이라 머릿속이 온통 다음 끼니 생각뿐이다. 연구팀을 후원하는 기업이 여러 코스로 이루어진 바비큐 자리에 스탠을 초대했고, 각 코스는 정확히 한 시간씩 이어진다.

스탠이 연속된 시간 동안 먹는 양은 일정한 규칙을 따른다. 첫 시간에는 최대 mm 칼로리까지 먹을 수 있다. 계속 먹으면 그 한도는 매시간 직전 한도의 3분의 2로 줄어들고, 칼로리의 소수점 이하는 버린다. 한 시간을 굶으면 그다음 시간에는 굶기 직전과 같은 한도로 먹을 수 있다. 두 시간을 연달아 굶으면 그다음 시간에는 한도가 다시 mm이 되고, 감소가 처음부터 시작된다.

m=900m = 900인 경우를 보자. 다섯 시간을 내리 먹으면 시간별 한도는 900, 600, 400, 266, 177이다. 세 번째 시간을 굶으면 900, 600, 0, 600, 400이 된다. 세 번째와 네 번째 시간을 모두 굶으면 900, 600, 0, 0, 900이 된다.

먹는 시간마다 스탠은 그 시간의 한도와 그 시간에 나온 코스의 칼로리 중 작은 값만큼 먹는다. 한도보다 적은 코스를 먹어도 먹은 것으로 치기 때문에 한도는 똑같이 줄어든다. 그래서 언제 굶는 편이 이득인지는 메뉴에 달려 있다.

코스의 개수와 코스별 칼로리가 주어질 때, 스탠이 먹을 수 있는 칼로리의 최댓값을 구하여라.

입력

첫째 줄에 코스의 개수 nn과 첫 시간의 한도 mm이 공백을 사이에 두고 주어진다. 둘 다 양의 정수이고 n100n \le 100, m20000m \le 20000이다.

둘째 줄에 각 코스의 칼로리를 나타내는 양의 정수 nn개가 나오는 순서대로 주어진다.

출력

스탠이 먹을 수 있는 칼로리의 최댓값을 출력한다.