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;
}