#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin>>n>>m;
int profit[n];
int weight[n];
for(int i = 0; i < n; i++)
{
cin>>profit[i];
}
for(int i = 0; i < n; i++)
{
cin>>weight[i];
}
int sack[n+1][m+1];
for(int i = 0; i < n+1; i++)
{
sack[i][0] = 0;
}
for(int j = 0; j < m+1; j++)
{
sack[0][j] = 0;
}
for(int i = 1; i < n+1; i++)
{
for(int j = 1; j < m+1; j++)
{
if(weight[i-1] > j)
{
sack[i][j] = sack[i-1][j];
}
else
{
sack[i][j] = max(sack[i-1][j], sack[i-1][j-weight[i-1]]+profit[i-1]);
}
}
}
for(int i = 0; i < n+1; i++)
{
for(int j = 0; j < m+1; j++)
{
cout<<sack[i][j]<<" ";
}
cout<<endl;
}
cout<<sack[n][m]<<endl;
int i = n, j = m;
while(i > 0)
{
if(sack[i][j] == sack[i-1][j])
{
i = i-1;
continue;
}
else
{
cout<<"Product "<<i<<" is selected"<<endl;
j = j - weight[i-1];
i = i-1;
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewogICAgaW50IG4sIG07CiAgICBjaW4+Pm4+Pm07CiAgICBpbnQgcHJvZml0W25dOwogICAgaW50IHdlaWdodFtuXTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgY2luPj5wcm9maXRbaV07CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIGNpbj4+d2VpZ2h0W2ldOwogICAgfQoKICAgIGludCBzYWNrW24rMV1bbSsxXTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuKzE7IGkrKykKICAgIHsKICAgICAgICBzYWNrW2ldWzBdID0gMDsKICAgIH0KICAgIGZvcihpbnQgaiA9IDA7IGogPCBtKzE7IGorKykKICAgIHsKICAgICAgICBzYWNrWzBdW2pdID0gMDsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbisxOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMTsgaiA8IG0rMTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYod2VpZ2h0W2ktMV0gPiBqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzYWNrW2ldW2pdID0gc2Fja1tpLTFdW2pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2Fja1tpXVtqXSA9IG1heChzYWNrW2ktMV1bal0sIHNhY2tbaS0xXVtqLXdlaWdodFtpLTFdXStwcm9maXRbaS0xXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbisxOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG0rMTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8c2Fja1tpXVtqXTw8IiAiOwogICAgICAgIH0KICAgICAgICBjb3V0PDxlbmRsOwogICAgfQoKICAgIGNvdXQ8PHNhY2tbbl1bbV08PGVuZGw7CiAgICBpbnQgaSA9IG4sIGogPSBtOwoKICAgIHdoaWxlKGkgPiAwKQogICAgewogICAgICAgIGlmKHNhY2tbaV1bal0gPT0gc2Fja1tpLTFdW2pdKQogICAgICAgIHsKICAgICAgICAgICAgaSA9IGktMTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQ8PCJQcm9kdWN0ICI8PGk8PCIgaXMgc2VsZWN0ZWQiPDxlbmRsOwogICAgICAgICAgICBqID0gaiAtIHdlaWdodFtpLTFdOwogICAgICAgICAgICBpID0gaS0xOwogICAgICAgIH0KCiAgICB9CgoKCgoKCgoKCn0K