#include <bits/stdc++.h>
using namespace std;
bool possible(int r, int amountOfHub , const int x[],long long b) {
if (amountOfHub == 1)
return true;
int count = 0;
const int firstHub = x[amountOfHub/2];
for (int i = 0; i < amountOfHub; i++)
count += abs(firstHub - x[i]);
if (count <= b)
return true;
for (int i = 0; i < r-amountOfHub; i++) {
count -= x[firstHub+i] - x[i];
count += x[i+amountOfHub] - x[firstHub+i];
int distToTravel = x[i+1+firstHub] - x[i+firstHub];
int leftHubs = (amountOfHub+1)/2-1;
count += leftHubs * distToTravel - (amountOfHub-leftHubs)*distToTravel;
if (count <= b)
return true;
}
return false;
}
int besthub (int r, int, int x[],long long B) {
int begin = 1,end = r;
while (end - begin > 1) {
int mid = (end+begin)/2;
if (possible(r,mid,x,B))
begin = mid;
else
end = mid;
}
if (possible(r,end,x,B))
return end;
return begin;
}
#if 0
int main() {
int r,l,b;
cin >> r >> l >> b;
vector<int> vec(r);
for (int& v : vec) cin >> v;
cout << besthub(r,l,vec.data(),b);
}
#endif