#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int>v[5005];
int dp[5005][5005];
int a[5005];
int c[5005];
int n,m,k,x;
int ans=0x3f3f3f3f;
signed main() {
cin>>n>>m>>k>>x;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
for(int i=1; i<=n; i++) {
cin>>c[i];
v[c[i]].push_back(i);
}
memset(dp,0x3f3f3f3f,sizeof(dp));
for(int i=0; i<=n; i++) {
dp[i][0]=0;
}
int cnt=0;
for(int i=1; i<=k; i++) {
for(int j=0; j<v[i].size(); j++) {
int kk=cnt+j+1;
if(kk>=n){
kk=n;
}
for(int q=1; q<=kk; q++) {
if(q%2==0) {
dp[kk][q]=min(dp[kk-1][q],dp[kk-1][q-1]+a[v[i][j]]+v[i][j]*x);
} else {
dp[kk][q]=min(dp[kk-1][q],dp[kk-1][q-1]+a[v[i][j]]-v[i][j]*x);
}
}
}
cnt+=v[i].size();
}
for(int i=n-m; i<=n; i++){
for(int j=(n-m)%2+(n-m); j<=i; j+=2){
ans=min(ans,dp[i][j]);
}
}
if(ans==0x3f3f3f3f){
cout<<"Impossible"<<endl;
return 0;
}
cout<<ans;
return 0;
}