#include <stdio.h>
#define maxN 100
#define maxK 100
#define maxT 30001
int main()
{
int TABLE[maxT][maxK]={0};
int Time[maxN]={0};
int Prosperity[maxN]={0}, Stoutness[maxN]={0};
int N, K, T;
int i, j, Max = 0, counter;
FILE *F1;
FILE *F2;
F1 = fopen("input.txt", "r");
F2 = fopen("output.txt", "w+");
fscanf(F1,"%d%d%d", &N, &K, &T);
for(i=0; i<N; ++i)
fscanf(F1,"%d", &(Time[i]));
for(i=0; i<N; ++i)
fscanf(F1,"%d", &(Prosperity[i]));
for(i=0; i<N; ++i)
fscanf(F1,"%d", &(Stoutness[i]));
for(i=0; i<N; i++)
TABLE[(Time[i])][(Stoutness[i])]=Prosperity[i];
if (T < K)
{
for(i=1; i<T; i++)
{
counter = i-1;
TABLE[i+1][0] = TABLE[i+1][0] +( (TABLE[i][0] > TABLE[i][1] ) ? TABLE[i][0] : TABLE[i][1] );
TABLE[i+1][i] = TABLE[i+1][i] +( (TABLE[i][i] > TABLE[i][counter]) ? TABLE[i][i] : TABLE[i][counter] );
if ( (TABLE[i][counter] >= TABLE[i][i]) && (TABLE[i][counter] >= TABLE[i][counter-1]) )
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter];
else
if ((TABLE[i][i] >= TABLE[i][counter]) && (TABLE[i][i] >= TABLE[i][counter-1]))
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][i];
else
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter-1];
for( j=1; j<i-1; j++)
{
if ( (TABLE[i][j] >= TABLE[i][j+1]) && (TABLE[i][j] >= TABLE[i][j-1]) )
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j];
else
if ((TABLE[i][j+1] >= TABLE[i][j]) && (TABLE[i][j+1] >= TABLE[i][j-1]))
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j+1];
else
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j-1];
}
}
}
else
{
for(i=1; i<K; i++)
{
counter = i-1;
TABLE[i+1][0] = TABLE[i+1][0] +( (TABLE[i][0] > TABLE[i][1] ) ? TABLE[i][0] : TABLE[i][1] );
TABLE[i+1][i] = TABLE[i+1][i] +( (TABLE[i][i] > TABLE[i][counter]) ? TABLE[i][i] : TABLE[i][counter] );
if ( (TABLE[i][counter] >= TABLE[i][i]) && (TABLE[i][counter] >= TABLE[i][counter-1]) )
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter];
else
if ((TABLE[i][i] >= TABLE[i][counter]) && (TABLE[i][i] >= TABLE[i][counter-1]))
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][i];
else
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter-1];
for( j=1; j<i-1; j++)
{
if ( (TABLE[i][j] >= TABLE[i][j+1]) && (TABLE[i][j] >= TABLE[i][j-1]) )
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j];
else
if ((TABLE[i][j+1] >= TABLE[i][j]) && (TABLE[i][j+1] >= TABLE[i][j-1]))
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j+1];
else
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j-1];
}
}
for(; i<T; i++)
{
counter = i-1;
TABLE[i+1][0] = TABLE[i+1][0] +( (TABLE[i][0] > TABLE[i][1] ) ? TABLE[i][0] : TABLE[i][1] );
TABLE[i+1][i] = TABLE[i+1][i] +( (TABLE[i][i] > TABLE[i][counter]) ? TABLE[i][i] : TABLE[i][counter] );
if ( (TABLE[i][counter] >= TABLE[i][i]) && (TABLE[i][counter] >= TABLE[i][counter-1]) )
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter];
else
if ((TABLE[i][i] >= TABLE[i][counter]) && (TABLE[i][i] >= TABLE[i][counter-1]))
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][i];
else
TABLE[i+1][counter] = TABLE[i+1][counter] + TABLE[i][counter-1];
for( j=1; j<i-1; j++)
{
if ( (TABLE[i][j] >= TABLE[i][j+1]) && (TABLE[i][j] >= TABLE[i][j-1]) )
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j];
else
if ((TABLE[i][j+1] >= TABLE[i][j]) && (TABLE[i][j+1] >= TABLE[i][j-1]))
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j+1];
else
TABLE[i+1][j] = TABLE[i+1][j] + TABLE[i][j-1];
}
}
}
Max = TABLE[i][0];
for(j = 1; i<K; j++)
if (Max < TABLE[i][j])
Max = TABLE[i][j];
fprintf(F2, "%d", Max);
return 0;
}