#include<stdio.h>
void block()
{
int
i,j,k,g,n,h,ans,tot,f[32],d[32],t[32],now[32];//f[i]第一个5分钟能钓的鱼
scanf("%d",&n);//n个湖
while (n)
{
scanf("%d",&h);
h=h*12;//一小时有12个5分钟,以五分钟为单位
for(i=0;i<n;i++)
{
scanf("%d",&f[i]);
now[i]=f[i];
}
for(i=0;i<n;i++)
scanf("%d",&d[i]);
for(i=0;i<n-1;i++)
scanf("%d",&t[i]);//跨湖时间
int times[32]={0};
ans=0;
for(i=0;i<n&&h>0;i++)//这个for循环的意思要懂,表示有n种方案1、只钓第一个湖
2.从第一个钓到第二个湖 ....n、从第一个钓到第n个
{
for(j=0;j<i;j++)
now[j]=f[j];
int
tnow[32]={0};tot=0;
for(k=0;k<h;k++)//在某个方案里,在h时间之内可以求出最多鱼的总量
{
g=0;//用于标记当前某个湖能钓到最多鱼
for(j=1;j<=i;j++)
if(now[j]>now[g])//找到最多鱼的湖
g=j;
tot=tot+now[g];//所钓到的鱼的总量自增
now[g]=now[g]-d[g];
if(now[g]<0)
now[g]=0;
tnow[g]++;//第g个湖时间自增
}
if(tot>ans)//表示当前方案与上一个方案鱼的总数进行比较,找出好的方案
{
ans=tot;
for(j=0;j<n;j++)
times[j]=tnow[j];//每个湖所用的时间
}
else if(tot==ans)
{
for(j=0;j<n;j++)
if(tnow[j]!=times[j])//若第一个湖和第二个湖的鱼数量相等,选择第一个湖
break;
if(j<n&&tnow[j]>times[j])
for(g=j;g<n;g++)
times[g]=tnow[g];
}
h=h-t[i];
}
for(i=0;i<n-1;i++)//输出格式的巧妙化处理,将最后一湖的个时间与expected鱼一同输出,但用换行来隔开
printf("%d,
",times[i]*5);//这里注意逗号后面有空格,不然提交后会说“presentation error”
printf("%d\nNumber of fish expected:
%d\n",times[n-1]*5,ans);
scanf("%d",&n);
if(n)//题目要求每个case之间要有空行
printf("\n");
}
}
int main()
{
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
{
block();
if(i!=N-1)//题目要求每个block之间要有空行
printf("\n");
}
return 0;
}