def dfs(u,k):
global minnum
if k>minnum:#剪枝,当前大循环小车数大于之前完整的大循环后得到的最小小车数时结束循环
return
if u==n:#满足全部小猫都坐上小车的要求
minnum=k
return
for i in range(k):#目前创建了k-1的小车,遍历每个小车
if sum[i]+c[u]<=w:#看是否有小车还能继续坐人
sum[i]+=c[u]
dfs(u+1,k)
sum[i]-=c[u]# for循环中有多个小车可以坐下此人时,保证此人不会同时坐多辆车
sum[k]=c[u]#不能就创建第k个小车
dfs(u+1,k+1)
n,w=map(int,input().split())
c=[int(input()) for i in range(n)]
sum=[0]*n
minnum=float('inf')
dfs(0,0)
print(minnum)