#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] = thứ tự đi của những người có trong tập mask sao cho đạt được giá trị pair {x, y} bé nhất
// với x là số hiệu của lượt đi hiện tại, y là tổng khối lượng của những người có trong lượt đi hiện tại
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++) {
dp[mask] = {INF, INF};
}
dp[0] = {1, 0};
for (int mask = 0; mask < (1 << n); mask++) {
int x = dp[mask].first, y = dp[mask].second;
for (int i = 0; i < n; i++) {
if ((mask >> i) & 1) continue;
int next_mask = mask | (1 << i);
if (y + w[i] <= S) {
minimize(dp[next_mask], make_pair(x, y + w[i]));
}
else {
minimize(dp[next_mask], make_pair(x + 1, w[i]));
}
}
}
cout << dp[(1 << n) - 1].first << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKaW50IG4sIFM7IAppbnQgd1syMF07IAoKaWkgZHBbMSA8PCAyMF07IC8vIGRwW21hc2tdID0gdGjhu6kgdOG7sSDEkWkgY+G7p2Egbmjhu69uZyBuZ8aw4budaSBjw7MgdHJvbmcgdOG6rXAgbWFzayBzYW8gY2hvIMSR4bqhdCDEkcaw4bujYyBnacOhIHRy4buLIHBhaXIge3gsIHl9IGLDqSBuaOG6pXQKCQkJCS8vIAkJCSAgduG7m2kgeCBsw6Agc+G7kSBoaeG7h3UgY+G7p2EgbMaw4bujdCDEkWkgaGnhu4duIHThuqFpLCB5IGzDoCB04buVbmcga2jhu5FpIGzGsOG7o25nIGPhu6dhIG5o4buvbmcgbmfGsOG7nWkgY8OzIHRyb25nIGzGsOG7o3QgxJFpIGhp4buHbiB04bqhaQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gUzsgCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IHdbaV07IAoKCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbik7IG1hc2srKykgewoJCWRwW21hc2tdID0ge0lORiwgSU5GfTsgCgl9CglkcFswXSA9IHsxLCAwfTsgCgoJZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMSA8PCBuKTsgbWFzaysrKSB7CgkJaW50IHggPSBkcFttYXNrXS5maXJzdCwgeSA9IGRwW21hc2tdLnNlY29uZDsgCgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJaWYgKChtYXNrID4+IGkpICYgMSkgY29udGludWU7IAoJCQlpbnQgbmV4dF9tYXNrID0gbWFzayB8ICgxIDw8IGkpOwoKCQkJaWYgKHkgKyB3W2ldIDw9IFMpIHsKCQkJCW1pbmltaXplKGRwW25leHRfbWFza10sIG1ha2VfcGFpcih4LCB5ICsgd1tpXSkpOyAKCQkJfQoJCQllbHNlIHsKCQkJCW1pbmltaXplKGRwW25leHRfbWFza10sIG1ha2VfcGFpcih4ICsgMSwgd1tpXSkpOyAKCQkJfQoJCX0KCX0KCgljb3V0IDw8IGRwWygxIDw8IG4pIC0gMV0uZmlyc3QgPDwgJ1xuJzsgCn0=