#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
long long a[1000100];
int erfen_ff(long long a,long long b[],int begin,int end)
{
if (a <= b[0])
{
return 0;
}//小于最小的
if (a >= b[end])
{
return end;
}//大于最大的
int mid = (begin + end) / 2;
if (b[mid] <= a && a <= b[mid + 1])
{
if ((a - b[mid]) <= (b[mid + 1] - a))
{
return mid;
}
else
{
return mid + 1;
}
}//mid <= 目标 <=(mid + 1),即找到目标了。
else
{
if (b[mid] < a)//?
{
mid++;
return erfen_ff(a,b,mid,end);
}
if (a < b[mid])
{
mid--;
return erfen_ff(a,b,begin,mid);
}
}
}
int main()
{
int n;
scanf("%d",&n);
for (int i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
long long w;
scanf("%d",&w);
sort(a,a + n);
int value = a[erfen_ff(w,a,0,n - 1)];
int i = 0,tot = 0;
while (value >= a[i])
{
value -= a[i];
i++;
tot++;
}
cout << tot;
return 0;
}