#include <cstdio>
#include <iostream>
#include <vector>
#include <utility>
#define MAXN 500005
#define MAXX 1000000009
using namespace std;
long long int d[1005][1005];
long long int a1[MAXN];
vector <vector <pair<int,long long int> > > m;
int h1[MAXN];
long long int h2[MAXN];
int n;
long long int resi(int p , long long int t/*,long long int u*/)
{
    if (d[p][t]!=-1) return d[p][t];
    int i,j,k;
    long long int mx=0LL,mt=0LL;
    long long int u;
    u=a1[p];
    int br=m[p].end()-m[p].begin();
    for (i=0;i<br;i++)
    {
        if (m[p][i].second<=t)
        {
            mt=resi(m[p][i].first,t-m[p][i].second);
        }
        if (mt>mx) mx=mt;
    }
    u+=mx;
    d[p][t]=u;
    return u;
}
int main()
{
    int i,j,k;
    long long int t,a=0LL,b,c;
    scanf("%d%lld",&n,&t);
    m.resize(n+1);
    if (n<=1000 && t<=1000)
    {
        for (i=0;i<n;i++)
        {
            for(j=0;j<=t;j++)
            {
                d[i][j]=-1;
            }
        }
        for (i=0;i<n;i++)
        {
            scanf("%lld",&a1[i]);
           // cin >> a[i];
        }
        for (i=0;i<n;i++)
        {
            scanf("%d",&h1[i]);
            //k--;
            //m[k].push_back(i);
        }
        for (i=0;i<n;i++)
        {
            scanf("%lld",&h2[i]);
        }
        for (i=0;i<n;i++)
        {
            m[h1[i]-1].push_back(make_pair(i,h2[i]));
        }
   /*     for (i=0;i<n;i++)
        {
            for (j=0;j<m[i].end()-m[i].begin();j++)
            cout << m[i][j].first << " " << m[i][j].second << "\n";
        }*/
        for (i=0;i<n;i++)
        {
            //printf("%lld\n",a);
            c=0LL;
            b=resi(i,t);
            if (b>a) a=b;
        }
        printf("%lld", a);
        return 0;
    }
    return 0;
}