Problem:
Score : 700 points

Problem Statement

There are N panels arranged in a row in Takahashi's house, numbered 1 through N. The i-th panel has a number A_i written on it. Takahashi is playing by throwing balls at these panels.

Takahashi threw a ball K times. Let the panel hit by a boll in the i-th throw be panel p_i. He set the score for the i-th throw as i \times A_{p_i}.

He was about to calculate the total score for his throws, when he realized that he forgot the panels hit by balls, p_1,p_2,...,p_K. The only fact he remembers is that for every i (1 ≦ i ≦ K-1), 1 ≦ p_{i+1}-p_i ≦ M holds. Based on this fact, find the maximum possible total score for his throws.

Constraints

1 ≦ M ≦ N ≦ 100,000

1 ≦ K ≦ min(300,N)

1 ≦ A_i ≦ 10^{9}

Partial Scores

In the test set worth 100 points, M = N.

In the test set worth another 200 points, N ≦ 300 and K ≦ 30.

In the test set worth another 300 points, K ≦ 30.

Input

The input is given from Standard Input in the following format:

N M K
A_1 A_2 … A_N

Output

Print the maximum possible total score for Takahashi's throws.

Sample Input 1

5 2 3
10 2 8 10 2

Sample Output 1

56

The total score is maximized when panels 1,3 and 4 are hit, in this order.

Sample Input 2

5 5 2
5 2 10 5 9

Sample Output 2

28

This case satisfies the additional constraint M = N for a partial score.

Sample Input 3

10 3 5
3 7 2 6 9 4 8 5 1 1000000000

Sample Output 3

5000000078

Solution in Fortran (gfortran v4.8.4) (judge verdict: Accepted)

program struck_out
  implicit none
  integer :: n, m, k, i, j, l, s, t
  integer(8) :: a(100000), dp(0:100000,300), deq(100000), nxt
  a = 0_8
  dp = 0_8
  deq = 0_8
  read(*,*) n, m, k
  read(*,*) a(1:n)
  dp(1:n,1) = a(1:n)
  do j = 2, k
    s = 1
    t = 1
    do i = 1, n
      if (s.eq.t) then
        dp(i,j) = -1_8
      else
        dp(i,j) = int(j,8)*a(i)+dp(deq(s),j-1)
        if (i+1-deq(s).gt.m) s = s+1
      end if
      nxt = dp(i,j-1)
      if (nxt.ne.-1_8) then
        do while (s.ne.t.and.dp(deq(t-1),j-1).lt.nxt)
          t = t-1
        end do
        deq(t) = i
        t = t+1
      end if
    end do
  end do
  write(*,'(i0)') maxval(dp(1:n,k))
  stop
end program struck_out