#include<iostream>
#include<algorithm>
using namespace std;
const int N = 20;
int ans=N;
int cat[N],w[N];
int n,m;
void dfs(int u,int k)
{
if(k>=ans) return;
if(u==n)
{
ans=k;
return;
}
for(int i=0;i<k;i++)
{
if(cat[u]+w[i]<=m)
{
w[i]+=cat[u];
dfs(u+1,k);
w[i]-=cat[u];
}
}
w[k]+=cat[u];
dfs(u+1,k+1);
w[k]=0;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>cat[i];
sort(cat,cat+n);
reverse(cat,cat+n);
dfs(0,0);
cout<<ans;
return 0;
}