#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define deb(x) cout << #x << "=" << x << endl
#define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
bool check(vector<ll>&v,ll mid,ll sum)
{
vector<ll>temp(mid);
for(ll i=0;i<mid;i++)
{
temp[i]=v[i];
}
bool val=true;
sort(temp.begin(),temp.end(),greater<ll>());
ll j=0;
for(ll i=0;i<(mid/2);i++)
{
ll maxi=max(temp[j],temp[j+1]);
sum-=maxi;
if(sum<0)
{
val=false;
break;
}
j+=2;
}
if(mid%2==1&&val==true){
sum-=temp[mid-1];
if(sum<0){
val=false;
}
}
if(val==true) return true;
else return false;
}
void solve()
{
ll n;cin>>n;
ll h;cin>>h;
vector<ll>a(n);
for(ll i=0;i<n;i++)cin>>a[i];
ll low=1;ll high=n;
ll ans=1;
while(low<=high)
{
ll mid=(low+high)/2;
if(check(a,mid,h)==true)
{
ans=mid;
low=mid+1;
}
else
{
high=mid-1;
}
}
cout<<ans<<endl;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
// precompute();
IOS;
ll T;
T=1;
// cin >> T;
while(T--){
solve();
}
return 0;
}
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |
1535A - Fair Playoff | 1538F - Interesting Function |