#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define pb push_back #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair pii; const int INF=1<<29; const double EPS=1e-9; const int dx[]={1,0,-1,0},dy[]={0,-1,0,1}; int N; int C; int V; int S[1550]; int T[1550]; int Y[1550]; int M[1550]; int dp[55][330]; int main(){ cin >> N; cin >> C; cin >> V; for (int i = 0; i < V; i++){ cin >> S[i]; } for (int i = 0; i < V; i++){ cin >> T[i]; } for (int i = 0; i < V; i++){ cin >> Y[i]; } for (int i = 0; i < V; i++){ cin >> M[i]; } for (int i = 0; i < 55; i++){ for (int j = 0; j < 330; j++){ dp[i][j] = INF; } } dp[0][0] = 0; for (int i = 0; i < N; i++){ for (int k = 0; k < V; k++){ if (S[k] - 1 == i){ for (int j = 0; j <= C; j++){ if (dp[i][j] < INF){ int ni = T[k] - 1; int nj = Y[k] + j; if (nj <= C){ dp[ni][nj] = min(dp[ni][nj], dp[i][j] + M[k]); } } } } } } int ans = INF; for (int j = 0; j <= C; j++){ ans = min(ans, dp[N - 1][j]); } if (ans == INF){ ans = -1; } cout << ans << endl; return 0; }