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}

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.

Examples

Input

5 2 3
10 2 8 10 2


Output

56


Input

5 5 2
5 2 10 5 9


Output

28


Input

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


Output

5000000078
#include <bits/stdc++.h>

#define ll long long 
using namespace std;

int m;
deque < pair < ll, int > > d[320];

ll get(int k, int i)
{
    if(k == 0)
        return 0;
    while(d[k].front().second < i - m)
        d[k].pop_front();
    return d[k].front().first;
}

void ins(ll val, int i, int k)
{
    while(!d[k].empty() && d[k].back().first <= val)
        d[k].pop_back();
    d[k].push_back(make_pair(val, i));
}

int k, n;
ll a[100020], answer = 0;

int main() {
    scanf("%d %d %d", &n, &m, &k);
    
    for(int i = 1; i <= n; ++ i)
      scanf("%lld", &a[i]);
    
    for(int i = 1; i < k; ++ i)
      d[i].push_back(make_pair(-1e15, 0));
    for(int i = 1; i <= n; ++ i)
    {
        for(int j = k; j >= 1;  -- j)
        {
            ll p = get(j - 1, i);
            p += j * a[i];
            if(j == k)
                answer = max(answer, p);
            else
                ins(p, i, j);
        }
    }
    
    cout << answer << endl;
    return 0;
}
