//By XieJiang 2017/03/15-2017/03/16
//Gone Fishing 1042
//策略,采取贪心:每次选取鱼最多的池塘
//贪心+枚举,也是参考了别人的博客CIA明白的,DP也可以,无奈水平实在太渣
#include<iostream>
using namespace std;
int n, h;//记录池塘数量,允许小时数
int fish[26][26], ftime[26][26], f[26], d[26], t[25];//最终每个池塘的捕鱼数,池塘的花费的时间,池塘初始鱼数,下降比例,池塘之间的时间
int ans[26];//贪心下,总的鱼数量
int main() {
int i, j, tn, th, emp, maxfish, maxschme, tf[26];
cin >> n;
while (n > 0) {
cin >> h;
h = h * 12;
memset(ans, 0, sizeof(ans));
memset(ftime, 0, sizeof(ftime)); memset(fish, 0, sizeof(ftime));
for (i = 1; i <= n; i++)//输入每个池塘的鱼数量
cin >> f[i];
for (i = 1; i <= n; i++)//输入每个池塘每五分钟下降的鱼数量
cin >> d[i];
for (i = 1; i < n; i++)//输入相邻间隔池塘的路上花费的时间
cin >> t[i];
//开始枚举(从1到n)
for (tn = 1; tn <= n; tn++) {
//目前要垂钓的湖的范围是1-tn
//计算路上花费的时间
th = h;
for (i = 1; i < tn; i++)
th -= t[i];
//将f[26]复制到一个临时的数组内,用以一次枚举过程
for (i = 1; i <= tn; i++)
tf[i] = f[i];
//模拟垂钓过程,结束条件:湖空或者时间用光,同时剩余时间放入第一个湖。
emp = 0;
while (th > 0 && emp < tn) {
//选择鱼最多的池塘
maxfish = 1;
for (i = 2; i <= tn; i++)
if (tf[i] > tf[maxfish])
maxfish = i;
if (tf[maxfish] <= 0)
break;
//表示下一次将选择这个池塘,将相关信息去除。
ans[tn] += tf[maxfish];
tf[maxfish] -= d[maxfish];
ftime[tn][maxfish]++;
th--;
//判断空的湖
if (tf[maxfish] <= 0)
emp++;
}
//将剩余未完时间归于湖1
if (th > 0)
ftime[tn][1] += th;
}
//选出鱼数量最多的方案
maxschme = 1;
for (i = 2; i <= n; i++)
if (ans[i] > ans[maxschme])
maxschme = i;
//输出结果
for (i = 1; i < n; i++)
cout << ftime[maxschme][i]*5 << ", ";
cout << ftime[maxschme][n]*5 << endl;
cout << "Number of fish expected: " << ans[maxschme] << endl;
cin >> n;
if (n != 0)
cout << endl;
}
}