#include <iostream>
#include <vector>

using namespace std;

long long dynmat[1007][1007];
long long val[1007];
long long tempputevi[1007];
vector<pair<int,int>> putevi;
long long n,t;

long long safe_acess(int x,int y)
{
    long long a=0;
    if(x>=0 && y>=0 && x<n && y<t){a=dynmat[x][y];}
    return a;
}

int main()
{
    cin>>n>>t;
    if(n>1000 || t>1000){return 0;}
    putevi.resize(n);
    for(int i=0;i<n;i++)
    {
        cin>>val[i];
    }
    for(int i=0;i<n;i++)
    {
        cin>>tempputevi[i];
    }
    for(int i=0;i<n;i++)
    {
        long long x;
        cin>>x;
        putevi[i]=make_pair(tempputevi[i]-1,x);
    }
    for(int j=0;j<=t;j++)
    {
        for(int i=0;i<n;i++)
        {
            dynmat[i][j]=val[i]+safe_acess(putevi[i].first,j-putevi[i].second);
        }
    }
//    cout<<endl;
//    for(int i=0;i<=t;i++)
//    {
//        for(int j=0;j<n;j++)
//        {
//            cout<<dynmat[j][i]<<" ";
//        }
//        cout<<endl;
//    }
    int maxv=dynmat[0][t];
    for(int i=1;i<n;i++)
    {
        if(dynmat[i][t]>maxv){maxv=dynmat[i][t];}
    }
    cout<<maxv;
    return 0;
}