#include <iostream>

using namespace std;
long long n,t,ni[1000001],di[1000001],xi[1000001],i,j;
long long resi(long long n,long long t,long long ni[],long long di[],long long xi[],long long i)
{
    long long j,maksimum=0,d=0;
    d=d+ni[i];


    for(j=1;j<=n;j++)
    {
        if(xi[j]==i && t>=di[j])
        {

            d=d+ resi(n,t-di[j],ni,di,xi,j);
            if(d>maksimum)
            {
                maksimum=d;
            }
        }
    }
    return maksimum;
}
int main()
{
    cin>>n;
    cin>>t;
    long long resenje=0,resenje2=0;
    for(i=1;i<=n;i++)
    {
        cin>>ni[i];
    }
     for(i=1;i<=n;i++)
    {
        cin>>xi[i];
    }
     for(i=1;i<=n;i++)
    {
        cin>>di[i];
    }
    resenje=resi(n,t,ni,di,xi,1);
    for(i=2;i<=n;i++)
    {
        resenje2=resi(n,t,ni,di,xi,i);
        cout<<resenje2<<" ";
        if(resenje2>resenje)
        {
            resenje=resenje2;
        }
    }
    cout<<resenje;


    return 0;
}