#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,d;
int a[N],v[N];
int minn=1e18;
bool vis[N];
int money,have_koilmeter,need_koilmeter;
signed main(){
// freopen("road2.in","r",stdin);
// freopen("road.out","w",stdout);
cin>>n>>d;
for(int i=1;i<=n-1;i++){
cin>>v[i];
}
for(int i=1;i<=n;i++){
cin>>a[i];
minn=min(minn,a[i]);
}
if(minn==a[1]){
int s;
for(int i=1;i<=n-1;i++){
s+=v[i];
}
cout<<(d-1+s)/d*a[1];
return 0;
}
for(int i=1;i<=n-1;i++){
if(!vis[i]){
need_koilmeter=v[i];
for(int j=i+1;j<=n;j++){
if(a[i]<=a[j]){
vis[j]=1;
need_koilmeter+=v[j];
// cout<<v[j]<<" "<<need_koilmeter<<endl;
}else{
int nxt=have_koilmeter;
// cout<<nxt<<" "<<money<<" "<<need_koilmeter<<" "<<have_koilmeter<<" "<<a[i]<<" "<<d<<" ";
if(need_koilmeter%d==0){
money+=need_koilmeter/d*a[i];
}else{
money+=(need_koilmeter-have_koilmeter+d-1)/d*a[i];
have_koilmeter-=need_koilmeter;
if(have_koilmeter<=0){
have_koilmeter=0;
}
}
// cout<<nxt<<" "<<money<<" "<<need_koilmeter<<" "<<have_koilmeter<<" "<<a[i]<<" "<<d<<" "<<i<<" "<<j<<endl;
if((need_koilmeter-nxt+d-1)%d!=d-1){
have_koilmeter+=(need_koilmeter+d-1)%d;
need_koilmeter=0;
}
break;
}
}
}
}
cout<<money;
return 0;
}