#include<iostream>
#include<math.h>
#include<iomanip>
#include<string>
#include<algorithm>
using namespace std;
long long N, B,s;
int a[100000];
void down(int i)
{
while ((2*i+1)<N&&a[i]<a[2*i+1]||(2*i+2)<N&&a[i]<a[(2*i+2)])
{
if (a[2 * i + 1] > a[2 * i + 2])
{
swap(a[i], a[2 * i + 1]);
i = 2 * i + 1;
}
else
{
swap(a[i], a[i * 2 + 2]);
i = 2 * i + 2;
}
}
}
void up(int i)
{
while ((i-1)/2>=0&&a[i]>a[(i-1)/2])
{
swap(a[i], a[(i - 1) / 2]);
i = (i - 1) / 2;
}
}
void Show(int n)
{
for (int i = 0; i <= n; i++)
cout << a[i] << " ";
}
int main()
{
cin >> N >> B;
int k;
for (int i = 0; i < N; i++)
{
cin >> a[i];
up(i);
}
int L = N-1,j=0;
while (s<B)
{
j++;
s += a[0];
a[0] = a[L];
L--;
down(0);
}
cout << j;
return 0;
}