//枚举+贪心+优先队列
//最有的方案肯定是从起点走到某个点终止,然后在这条路上通过贪心选择最优的选择(每个点应停留的时间)。最后通过比较得出最优的方案
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=26;
int t_spent[maxn],eve[maxn][maxn],cost[maxn],d[maxn];
int n,h;
struct node
{
int num,begin;
};
node f[maxn];
bool operator<(node a,node b)
{
if(a.begin==b.begin) return a.num>b.num;
else return a.begin<b.begin;
}
int solve(int loc,int left)
{
priority_queue<node> q;
int i,amount=0;
for(i=1;i<=loc;i++) q.push(f[i]);
while(left>=5)
{
if(q.empty()) break;
node tem=q.top();
q.pop();
amount+=tem.begin;
tem.begin-=d[tem.num];
if(tem.begin<0) tem.begin=0;
eve[loc][tem.num]+=5;
q.push(tem);
left-=5;
}
return amount;
}
int main()
{
while(cin>>n)
{
if(n==0) break;
scanf("%d",&h);
memset(eve,0,sizeof(eve));
memset(cost,0,sizeof(cost));
int max=-1;
int i;
for(i=1;i<=n;i++)
{
f[i].num=i;
cin>>f[i].begin ;
}
for(i=1;i<=n;i++) cin>>d[i];
int tem;
for(i=2;i<=n;i++)
{
scanf("%d",&tem);
cost[i]=cost[i-1]+tem*5;
}
int ou,maxloc;
for(i=1;i<=n;i++)
{
ou=solve(i,h*60-cost[i]);
if(ou>max)
{
max=ou;
maxloc=i;
}
}
for(i=1;i<=n;i++)
{
if(i!=1) printf(", ");
printf("%d",eve[maxloc][i]);
}
printf("\n");
printf("Number of fish expected: %d\n\n",max);
}
return 0;
}