#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
#define cin fin
#define cout fout
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
for (int test = 0; test < 3; test++) {
int n;
long long G;
cin >> n >> G;
vector<long long> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
vector<pair<int,long long>> dp(1<<n, {n+1, 0});
dp[0] = {1, 0};
for (int mask = 0; mask < (1<<n); mask++) {
for (int i = 0; i < n; i++) {
if (mask & (1<<i)) continue;
auto cur = dp[mask];
int nmask = mask | (1<<i);
if (cur.second + v[i] <= G) {
cur.second += v[i];
} else {
cur.first++;
cur.second = v[i];
}
if (cur.first < dp[nmask].first ||
(cur.first == dp[nmask].first && cur.second > dp[nmask].second)) {
dp[nmask] = cur;
}
}
}
cout << dp[(1<<n)-1].first << '\n';
}
}