/*
分析:
简单递推。
以前以为要用背包来做,不过今儿再次偶然间邂逅此题后,
发现,其实直接暴力的一点儿一点儿推就行了(其实和DP也差不
了多少)。
思路:
将n个物品的cost从小到大排序,然后两个嵌套的for循
环来推总消费,c2[i]=1表示总消费值为i的情况是可以出现
的。
很简单的,具体看代码吧,至于为什么cost要从小到大排序,
是为了防止漏掉情况,比如m=50,cost1=10,cost2=50,cost3=30,
那么显然,要买了1、3后再买2才行,如果不排序的话,结果就是
只买了1、3。
至于为什么排个序就能干掉这种问题呢,很容易想的,就不
啰嗦了。
2012-11-10
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int cost[1011];
int c1[2000],c2[2000];
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,m,limit;
int i,l;
int ans;
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++) scanf("%d",&cost[i]);
qsort(cost,n,sizeof(cost[0]),cmp);
scanf("%d",&m);
if(m<5) {printf("%d\n",m);continue;}
limit=m-5;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(i=0;i<n;i++)
{
for(l=0;l<=limit;l++) if(c1[l]) c2[l+cost[i]]=1;
c2[cost[i]]=1;
for(l=0;l<=1100;l++) c1[l]=c2[l];
}
ans=0;
for(i=0;i<=1100;i++) if(c2[i]) ans=i;
printf("%d\n",m-ans);
}
return 0;
}