오렌지 출하

컨베이어 위 귤을 순서대로 최대 M개씩 상자에 나누어 담을 때 상자당 포장비와 크기 차이에 개수를 곱한 비용의 합을 최소화합니다.

보통6동적 계획법슬라이딩 윈도우아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

Juicy Orange Industry(JOI)는 맛있는 오렌지를 상자에 포장해 출하하는 회사다.

JOI는 모아 둔 오렌지 NN개를 상자에 담아 출하한다. 먼저 오렌지를 공장의 컨베이어 벨트 위에 한 줄로 놓는다. 벨트 위의 오렌지에는 앞에서부터 차례로 11번부터 NN번까지 번호가 붙어 있고, ii번 오렌지의 크기는 AiA_i이다.

다음으로 오렌지를 앞에서부터 순서대로 상자에 나누어 담는다. 한 상자에 담는 오렌지의 번호는 연속해야 한다.

한 상자에는 오렌지를 최대 MM개까지 담을 수 있다. 상자 하나에 오렌지를 담는 비용은 K+s×(ab)K + s \times (a - b)이다. 여기서 aa는 그 상자에 담은 오렌지 크기의 최댓값, bb는 최솟값, ss는 담은 오렌지의 개수다. KK는 상자를 포장하는 비용이고 모든 상자에 똑같이 적용된다.

컨베이어 벨트 위에 놓인 오렌지의 정보, 한 상자에 담을 수 있는 오렌지 개수의 최댓값, 상자를 포장하는 비용 KK가 주어질 때 오렌지를 모두 포장하는 비용의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 오렌지의 개수 NN (1N200001 \le N \le 20\,000), 한 상자에 담을 수 있는 오렌지 개수의 최댓값 MM (1M10001 \le M \le 1\,000, MNM \le N), 상자를 포장하는 비용 KK (0K10000000000 \le K \le 1\,000\,000\,000)가 공백으로 구분되어 주어진다.

둘째 줄부터 NN개의 줄에 오렌지의 크기 AiA_i (1Ai10000000001 \le A_i \le 1\,000\,000\,000)가 순서대로 한 줄에 하나씩 주어진다.

출력

첫째 줄에 오렌지를 모두 포장하는 비용의 최솟값을 출력한다.