Link to this code: https://cses.fi/paste/e5c0ddf5c0b47ad42a1d2f/
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef array<ll, 2> _2ll;

ll a[30];
ll n, x;
mt19937 rng(chrono::steady_clock().now().time_since_epoch().count());

int Access(int bin, int bit){
	return (bin >> bit) & 1;
}
int Switch(int bin, int bit){
	return bin ^ (1 << bit);
}
int TurnOn(int bin, int bit){
	return bin | (1 << bit);
}
int TurnOff(int bin, int bit){
	return Switch(TurnOn(bin, bit), bit);
}

ll Calc(){
	multiset<ll> s;
	s.insert(x);
	for(int i = 0; i < n; i++){
		auto p = s.lower_bound(a[i]);
		if(p == s.end()) s.insert(x - a[i]);
		else{
			ll d = *p;
			s.erase(p);
			s.insert(d - a[i]);
		}
	}
	return s.size();
}

signed main(){

	cin >> n >> x;
	for(int i = 0; i < n; i++) 
		cin >> a[i];
	
	int step = 1e5;
	ll res = n;
	while(step--){
		shuffle(a, a + n, rng);
		res = min(res, Calc());
	}

	cout << res << endl;

	return 0;
}