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<stdio.h>
#include<vector>
#include<algorithm>
#include<deque>
using namespace std;
typedef long long ll;
ll dp[2][100001];
typedef pair<ll,ll>pii;
int main()
{
	int num,gen,kai;
	scanf("%d%d%d",&num,&gen,&kai);
	vector<ll>vec;
	vec.push_back(0);
	for(int i=0;i<num;i++)
	{
		int z;
		scanf("%d",&z);
		vec.push_back(z);
	}
	num++;
	int cur=0;
	for(int i=0;i<kai;i++)
	{
		deque<pii>deq;
		for(int j=0;j<num;j++)
		{
			if(!deq.empty())
			{
				if(deq[0].first==j-gen-1)deq.pop_front();
			}
			if(deq.empty())dp[1-cur][j]=-1000000000000000000LL;
			else dp[1-cur][j]=deq[0].second+vec[j]*(i+1);
			for(;;)
			{
				if(deq.empty())break;
				pii z=deq[deq.size()-1];
				if(z.second<dp[cur][j])deq.pop_back();
				else break;
			}
			deq.push_back(make_pair(j,dp[cur][j]));
		}
		for(int j=0;j<num;j++)dp[cur][j]=0;
		cur=1-cur;
	}
	ll maxi=0;
	for(int i=0;i<num;i++)maxi=max(maxi,dp[cur][i]);
	printf("%lld\n",maxi);
}