#include<iostream>
using namespace std;
#define num 101
int f[num]; //每个湖可以钓到的鱼的数量
int d[num]; //每个胡每次减少的鱼的数量
int p[num]; //每个胡钓鱼的次数
int ti[num]; //相邻两个湖之间的时间
int best = 0;
void greedy(int pos, int time) //此处time已经转化过,代表可以钓鱼的次数
{
if (time <= 0)
return;
int fish[num] = { 0 };
int plan[num] = { 0 };
int t = 0; //可以钓到的鱼的数量
int i, j;
for ( i = 1; i <= pos; i++)
{
fish[i] = f[i];
}
for ( i = 0; i < time; i++) //只要是还有次数,就再次寻找最优的湖
{
int max = 0; //搜索可以钓到的最大数量
int id = -1; //标记是否找到最大数量的湖,找到则id为对应的湖的编号,若没有,则为-1;
//遍历寻找是否有符合条件的湖
for ( j = 1; j <= pos; j++)
{
if (fish[j] > max)
{
max = fish[j];
id = j;
}
}
//找到符合条件的湖,进行钓鱼
if (id != -1)
{
plan[id]++; //对每个胡的钓鱼次数更新
fish[id] -= d[id]; //对湖可以调到的鱼的数量更新
t += max; //对钓到的鱼的数量进行更新
}
//没有找到
else
{
plan[1]++;
}
}
if (t > best)
{
best = t; //更新最优值
for (int i = 1; i <= pos; i++)
{
p[i] = plan[i]; //更新最优解
}
}
}
int main()
{
int n; //湖的数量
int h; //可以钓鱼的时间
cin >> n >> h;
h = h * 60;
int time = 0;
//输入初始状态下每个湖可以钓到的鱼的数量
for (int i = 1; i <= n; i++)
{
cin >> f[i];
}
//输入湖钓鱼递减的数量
for (int i = 1; i <= n; i++)
{
cin >> d[i];
}
//两个胡之间的时间,i表示从湖i到湖i-1要花费的时间
for (int i = 1; i < n; i++)
{
cin >> ti[i];
}
for (int i = 1; i <= n; i++)
{
int k = (h - time*5) / 5;
greedy(i, k);
if (i == n)
break;
time += ti[i];
}
cout << "max=" << best<<endl;
for (int i = 1; i <= n; i++)
{
cout << p[i]*5 << " ";
}
}