#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGNoZWNrKHZlY3RvcjxpbnQ+ICZudW1zLHZlY3RvcjxpbnQ+ICZhcnIsaW50IGwpewoJaW50IG49bnVtcy5zaXplKCk7Cgl2ZWN0b3I8aW50PiBwcmVmaXgoMipuKzEsMCk7CglpbnQgb3A9MDsKCQoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJCgkJaWYoaT4wKXsKCQkJcHJlZml4W2ldPXByZWZpeFtpXSArIHByZWZpeFtpLTFdOwoJCQludW1zW2ldPW51bXNbaV0rcHJlZml4W2ldOwoJCQkKCQl9CgkJaWYoYXJyW2ldPm51bXNbaV0pewoJCQlpbnQgZGlmZj1hcnJbaV0tbnVtc1tpXTsKCQkJb3A9b3ArZGlmZjsKCQkJcHJlZml4W2ldPXByZWZpeFtpXStkaWZmOwoJCQlwcmVmaXhbaStsXT1wcmVmaXhbaStsXS1kaWZmOwoJCQludW1zW2ldPW51bXNbaV0gKyBkaWZmOwoJCX0KCQkKCX0KCXJldHVybiBvcDsKCQp9CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJaW50IG4sbSxsOwoJY2luPj5uPj5tPj5sOwoJdmVjdG9yPGludD4gYXJyKG4pOwoJaW50IGxvdz0gSU5UX01BWDsKCWludCBoaWdoID0gSU5UX01JTjsKCQoJCglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWNpbj4+YXJyW2ldOwoJCWxvdyA9IG1pbihsb3csYXJyW2ldLW0pOwoJICAgIGhpZ2ggPSBtYXgoaGlnaCxhcnJbaV0pOwoKCX0KCWludCBhbnM9MDsKCQoJd2hpbGUobG93PD1oaWdoKXsKCQlpbnQgbWlkID0gKGxvdytoaWdoKS8yOwoJCXZlY3RvcjxpbnQ+IG51bXMobixtaWQpOwoJCWlmKGNoZWNrKG51bXMsYXJyLGwpPD1tKXsKCQkJYW5zPW1pZDsKCQkJaGlnaD1taWQtMTsKCQl9CgkJZWxzZXsKCQkJbG93PW1pZCsxOwoJCQkKCQl9Cgl9CgkKCWNvdXQ8PGFuczw8ZW5kbDsKCQoJCgkKCXJldHVybiAwOwp9