#include <bits/stdc++.h>

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


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

            d=d+resi(n,t-di[j],ni,di,xi,j,niz);
            d=d+ni[i];
            if(d>maksimum)
            {
                niz[1]=j;
                maksimum=d;
            }
        }
    }
    return maksimum;
}
int main()
{
    long long xa=0;
    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,niz);
    resenje=resenje+ni[niz[1]];
    for(i=2;i<=n;i++)
    {
        resenje2=resi(n,t,ni,di,xi,i,niz);

        resenje2=resenje2+ni[niz[1]];
        if(resenje2>resenje)
        {
            resenje=resenje2;
        }
    }
    cout<<resenje;


    return 0;
}