#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
int n, s;
int w[20];
ii dp[1 << 20]; // dp[mask] = {x, y}
// x = Số lượt đi tối thiểu để đưa tất cả mọi người trong mask lên đỉnh của toà nhà
// y = Tổng khối lượng hiện tại của lượt đi đang xét (lượt cuối cùng)
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> s;
for (int i = 0; i < n; i++) cin >> w[i];
for (int mask = 0; mask < (1 << n); mask++) {
ii& cur = dp[mask];
if (mask == 0) {
cur = {1, 0};
continue;
}
cur = {INF, INF};
for (int i = 0; i < n; i++) {
if (!(mask & (1 << i))) continue;
int prev_mask = mask ^ (1 << i);
int x = dp[prev_mask].first, y = dp[prev_mask].second;
if (y + w[i] <= s) {
minimize(cur, make_pair(x, y + w[i]));
}
else {
minimize(cur, make_pair(x + 1, w[i]));
}
}
}
cout << dp[(1 << n) - 1].first << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKaW50IG4sIHM7CmludCB3WzIwXTsgCgppaSBkcFsxIDw8IDIwXTsgLy8gZHBbbWFza10gPSB7eCwgeX0KCQkJCS8vICAgICB4ICAgID0gU+G7kSBsxrDhu6N0IMSRaSB04buRaSB0aGnhu4N1IMSR4buDIMSRxrBhIHThuqV0IGPhuqMgbeG7jWkgbmfGsOG7nWkgdHJvbmcgbWFzayBsw6puIMSR4buJbmggY+G7p2EgdG/DoCBuaMOgCgkJCQkvLyAgICAgeSAgICA9IFThu5VuZyBraOG7kWkgbMaw4bujbmcgaGnhu4duIHThuqFpIGPhu6dhIGzGsOG7o3QgxJFpIMSRYW5nIHjDqXQgKGzGsOG7o3QgY3Xhu5FpIGPDuW5nKQkJCSAgCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IHM7IAoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiB3W2ldOyAKCglmb3IgKGludCBtYXNrID0gMDsgbWFzayA8ICgxIDw8IG4pOyBtYXNrKyspIHsKCQlpaSYgY3VyID0gZHBbbWFza107IAoJCWlmIChtYXNrID09IDApIHsKCQkJY3VyID0gezEsIDB9OyAKCQkJY29udGludWU7IAoJCX0KCQljdXIgPSB7SU5GLCBJTkZ9OyAKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCQlpZiAoIShtYXNrICYgKDEgPDwgaSkpKSBjb250aW51ZTsgCgkJCWludCBwcmV2X21hc2sgPSBtYXNrIF4gKDEgPDwgaSk7IAoJCQlpbnQgeCA9IGRwW3ByZXZfbWFza10uZmlyc3QsIHkgPSBkcFtwcmV2X21hc2tdLnNlY29uZDsgIAoJCQlpZiAoeSArIHdbaV0gPD0gcykgewoJCQkJbWluaW1pemUoY3VyLCBtYWtlX3BhaXIoeCwgeSArIHdbaV0pKTsgCgkJCX0KCQkJZWxzZSB7CgkJCQltaW5pbWl6ZShjdXIsIG1ha2VfcGFpcih4ICsgMSwgd1tpXSkpOyAKCQkJfQoJCX0KCX0KCgljb3V0IDw8IGRwWygxIDw8IG4pIC0gMV0uZmlyc3QgPDwgJ1xuJzsgCn0=