#include<bits/stdc++.h>
using namespace std;
int n,maxt,d[100001];
bool f(long long k){
long long y=0;
long long ans=0;
priority_queue<long long,vector<long long>,greater<long long> >q;
for(int i=1;i<=k;++i){
q.push(d[i]);
}
for(int i=k+1;i<=n;++i){
ans+=q.top()-y;
y=q.top();
q.pop();
q.push(d[i]+y);
if(ans>maxt){
return false;
}
}
while(--k){
ans+=q.top()-y;
y=q.top();
q.pop();
if(ans>maxt){
return false;
}
}
return true;
}
long long half(){
long long l=0;
long long r=100000;
long long ans=0;
while(l<=r){
long long mid=(l+r)/2;
if(f(mid)){
ans=mid;
r=mid-1;
}
else l=mid+1;
}
return ans;
}
int main(){
scanf("%d%d",&n,&maxt);
for(long long i=1;i<=n;++i)scanf("&d",&d[i]);
printf("%lld",half());
return 0;
}