#include<iostream>
#include<map>
#define int long long
using namespace std;
int n, m, a[25];
map<int, int> last;
bool mem[300005];
int cache[300005];
int solve(int used){
if (used == ((1 << n) - 1))
return 1;
if (mem[used]) return cache[used];
int ret = 99;
for (int i=0; i<n; i++){
int mask = 1 << i;
if (used & mask) continue;
if (last[used] + a[i] > m)
last[used + mask] = a[i];
else
last[used + mask] = last[used] + a[i];
ret = min(ret, solve(used + mask) + (last[used] + a[i] > m));
}
mem[used] = true;
return cache[used] = ret;
}
signed main(){
cin >> n >> m;
for (int i=0; i<n; i++) cin >> a[i];
cout << solve(0);
}
dfs得24分,为什么?谢谢!