#include<bits/stdc++.h>
using namespace std;
int n,d;
int v[100100],a[100100];
int ans=0;
int j_l(int a,int b){
int f=0;
for(int i=a;i<b;i++) f+=v[i];
return f;
}//计算站点a,b之间的距离
int main(){
cin>>n>>d;
for(int i=1;i<n;i++) cin>>v[i];
for(int i=1;i<=n;i++) cin>>a[i];
int k=1;//当前站点
int djl=0;//剩余油可以多行驶的距离
while(k<n){
int l=n;
int buy=0;//当前需要买的油数
for(int i=k+1;i<=n;i++){
if(a[i]<a[k]){
l=i;
break;
}
}//寻找去买油的下一站点l
int jl=j_l(k,l);
jl-=djl;//距离 - 剩余油多行驶的距离 = 需要再买油行驶的距离
buy=(jl+d-1)/d;//买的油数 = 需要买油行驶的距离 / 每升油行驶的距离 (向上取整)
djl=buy*d-jl;//行驶到下一站后的多余距离 = 买的油行驶的距离 - 到下一站后的距离
//cout<<k<<" "<<buy<<" "<<buy*a[k]<<endl; 在第k站买了buy升油花了buy*a[k]元
ans+=buy*a[k]; //加一下花费
k=l;//更新下一站的起点
}
cout<<ans;
return 0;
}