#include <stdio.h>
#include <limits.h>
#define pmax (1<<17) + 5
#define inf INT_MAX - 5
int n, g, w, v [25], s [pmax];
bool ok;
void init ()
{
int i, k=1<<n;
// fprintf(stderr, "%d\n", k);
for (i=1; i <= k; ++i)
s [i]=inf;
}
void scan ()
{
int i;
ok=true;
scanf ("%d%d", &n, &g);
for (i=1; i <= n; ++i)
{
scanf ("%d", &v [i]);
if (v [i] > g)
ok=false;
}
}
inline int min (int a, int b)
{
if (a < b)
return a;
return b;
}
void back (int k, int sum, int b)
{
if (sum > g)
return;
if (b == n)
{
// fprintf(stderr, "%d %d %d %d\n", w, k, s [w], s [k]+1);
s [w]=min (s [w], s [k]+1);
return ;
}
if (k & (1 << b))
{
back (k, sum, b+1);
// fprintf(stderr, "%d %d %d\n", k, b, k^(1<<b));
back (k ^ (1 << b), sum + v [b+1], b+1);
}
else
back (k, sum, b+1);
}
void zeb ()
{
int k=1<<n;
for (w=1; w < k; ++w)
back (w, 0, 0); //fprintf(stderr, "%d\n", s [w]); }
}
int main ()
{
freopen ("zebughil.in", "r", stdin);
freopen ("zebughil.out", "w", stdout);
for (int i=1; i <= 3; ++i)
{
scan ();
if (ok)
{
init ();
zeb ();
printf ("%d\n", s [(1 << n)-1]);
}
else
printf ("%d\n", 0);
}
return 0;
}