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

using namespace std;
int check(vector<int> &nums,vector<int> &arr,int l){
	int n=nums.size();
	vector<int> prefix(2*n+1,0);
	int op=0;
	
	for(int i=0;i<n;i++){
		
		if(i>0){
			prefix[i]=prefix[i] + prefix[i-1];
			nums[i]=nums[i]+prefix[i];
			
		}
		if(arr[i]>nums[i]){
			int diff=arr[i]-nums[i];
			op=op+diff;
			prefix[i]=prefix[i]+diff;
			prefix[i+l]=prefix[i+l]-diff;
			nums[i]=nums[i] + diff;
		}
		
	}
	return op;
	
}
int main() {
	// your code goes here
	int n,m,l;
	cin>>n>>m>>l;
	vector<int> arr(n);
	int low= INT_MAX;
	int high = INT_MIN;
	
	
	for(int i=0;i<n;i++)
	{
		cin>>arr[i];
		low = min(low,arr[i]-m);
	    high = max(high,arr[i]);

	}
	int ans=0;
	
	while(low<=high){
		int mid = (low+high)/2;
		vector<int> nums(n,mid);
		if(check(nums,arr,l)<=m){
			ans=mid;
			high=mid-1;
		}
		else{
			low=mid+1;
			
		}
	}
	
	cout<<ans<<endl;
	
	
	
	return 0;
}