#include <bits/stdc++.h>
#define int long long
#define fi first
#define si second
#define For(i,a,b) for (int i = (a), _b =(b); i <= _b; ++i)
#define all(v) v.begin(), v.end()
#define Unique(v) v.erase(unique(all(v)), v.end())
#define MASK(i) (1LL << (i))
#define bit(i,n) (((n)>>(i)) & 1)
#define Vii vector<pair<int,int>>
#define setpr(x) cout<<setprecision(x)<<fixed
#define Prior priority_queue< pair<int,int> , Vii, greater<Pair> >
using namespace std;
const int Mod = 1E9 + 7;
const long long INF = 4E18;
const int N = (1 << 20);
int n,W;
pair<int,int> dp[N];
pair<int,int> Min(pair<int,int> a, pair<int,int> b, int w)
{
// cout << b.si <<' ' << w << endl;
if (b.si + w > W)
{
b.si = w;
b.fi += 1;
}
else b.si += w;
return min(a,b);
}
int a[N];
signed main(){
cin >> n >> W;
For(i,0,n-1) cin >> a[i];
For(Mask,1,(1<<n)-1) dp[Mask] = {1e18,1e18};
dp[0] = {1,0};
For(Mask,0,(1<<n)-1)
{
For(i,0,n-1)
{
if(Mask &(1<<i)) {
dp[Mask] = Min(dp[Mask],dp[Mask^(1<<i)],a[i]);
}
}
}
cout << dp[(1<<n)-1].fi;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZyAKI2RlZmluZSBmaSAgICAgICAgICAgZmlyc3QgCiNkZWZpbmUgc2kgICAgICAgICAgIHNlY29uZCAKI2RlZmluZSBGb3IoaSxhLGIpICAgZm9yIChpbnQgaSA9IChhKSwgX2IgPShiKTsgaSA8PSBfYjsgKytpKQojZGVmaW5lIGFsbCh2KSAgICAgICB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBVbmlxdWUodikgICAgdi5lcmFzZSh1bmlxdWUoYWxsKHYpKSwgdi5lbmQoKSkgICAKI2RlZmluZSBNQVNLKGkpICAgICAgKDFMTCA8PCAoaSkpCiNkZWZpbmUgYml0KGksbikgICAgICgoKG4pPj4oaSkpICYgMSkKI2RlZmluZSBWaWkgICAgICAgICAgdmVjdG9yPHBhaXI8aW50LGludD4+CiNkZWZpbmUgc2V0cHIoeCkgICAgIGNvdXQ8PHNldHByZWNpc2lvbih4KTw8Zml4ZWQKI2RlZmluZSBQcmlvciAgICAgICAgcHJpb3JpdHlfcXVldWU8IHBhaXI8aW50LGludD4gLCBWaWksIGdyZWF0ZXI8UGFpcj4gPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBNb2QgPSAxRTkgKyA3Owpjb25zdCBsb25nIGxvbmcgSU5GICA9IDRFMTg7CmNvbnN0IGludCBOID0gKDEgPDwgMjApOwppbnQgbixXOwpwYWlyPGludCxpbnQ+IGRwW05dOwpwYWlyPGludCxpbnQ+IE1pbihwYWlyPGludCxpbnQ+IGEsIHBhaXI8aW50LGludD4gYiwgaW50IHcpCnsgICAKICAvLyAgY291dCA8PCBiLnNpIDw8JyAnIDw8IHcgPDwgZW5kbDsKICAgIGlmIChiLnNpICsgdyA+IFcpCiAgICB7CiAgICAgICAgYi5zaSA9IHc7CiAgICAgICAgYi5maSArPSAxOwogICAgfQogICAgZWxzZSBiLnNpICs9IHc7CiAgICByZXR1cm4gbWluKGEsYik7Cn0KaW50IGFbTl07CnNpZ25lZCBtYWluKCl7CiAgICBjaW4gPj4gbiA+PiBXOwogICAgRm9yKGksMCxuLTEpIGNpbiA+PiBhW2ldOwogICAgRm9yKE1hc2ssMSwoMTw8biktMSkgZHBbTWFza10gPSB7MWUxOCwxZTE4fTsKICAgIGRwWzBdID0gezEsMH07CiAgICBGb3IoTWFzaywwLCgxPDxuKS0xKQogICAgewogICAgICAgIEZvcihpLDAsbi0xKQogICAgICAgIHsKICAgICAgICAgICAgaWYoTWFzayAmKDE8PGkpKSB7CiAgICAgICAgICAgICAgICBkcFtNYXNrXSA9IE1pbihkcFtNYXNrXSxkcFtNYXNrXigxPDxpKV0sYVtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBjb3V0IDw8IGRwWygxPDxuKS0xXS5maTsKfQo=