#include <bits/stdc++.h>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n, gmax;
int main()
{
while(fin >> n >> gmax) {
int v[n + 2];
vector<pair<int, int>> dp((1 << n) + 2); ///tine minte nr minim de camioane + gradul de umplere al ultimului camion
for(int i=0; i<n; i++) fin >> v[i];
dp[0].first = 1;
for(int i=1; i < (1 << n); i++) dp[i].first = n + 1;
for(int mask=0; mask < (1 << n); mask++) {
for(int i=0; i<n; i++) {
if(!(mask & (1 << i))) {
if(dp[mask].second + v[i] <= gmax) dp[mask ^ (1 << i)] = min(dp[mask ^ (1 << i)], {dp[mask].first, dp[mask].second + v[i]});
else dp[mask ^ (1 << i)] = min(dp[mask ^ (1 << i)], {dp[mask].first + 1, v[i]});
}
}
}
fout << dp[(1 << n) - 1].first << '\n';
}
return 0;
}