#include <bits/stdc++.h>
using namespace std;
long long dis[100005], val[100005], st[100005];
int main()
{
long long n, d, ans = 0, liu;
cin >> n >> d;
for(int i = 1; i <= n - 1; i++) cin >> dis[i];
for(int i = 1; i <= n; i++) cin >> val[i];
for(int i = 1; i <= n - 1; i++)
{
st[i] = st[i - 1] + dis[i];
}
long long car = 1;
while(1)
{
if(car == n) break;
if(car == 1)
{
bool flag = false;
long long index = 0;
for(int i = 2; i <= n; i++)
{
if(val[i] < val[1])
{
flag = true;
index = i;
break;
}
}
if(flag == false)
{
long long oil = st[n - 1] / d;
if(st[n - 1] % d != 0) oil++;
return 0;
}
else
{
long long oil2 = st[index - 1] / d;
if((st[index - 1] % d - liu) != 0) oil2++;
if((st[index - 1] % d - liu) != 0) liu = d - ((st[index - 1] - liu) % d);
else liu = 0;
ans += oil2 * val[1];
}
car = index;
}
else
{
long long flag2 = -1;
for(int i = car + 1; i <= n - 1; i++)
{
if(val[i] < val[car])
{
flag2 = i;
break;
}
}
if(flag2 == -1)
{
long long oil3 = (st[n - 1] - st[car - 1] - liu) / d;
if((st[n - 1] - st[car - 1] - liu) % d != 0)
{
oil3++;
}
if((st[n - 1] - st[car - 1] - liu) % d != 0) liu = d - ((st[n - 1] - st[car - 1] - liu) % d);
else liu = 0;
ans += oil3 * val[car];
car = n;
}
else
{
long long oil4 = (st[flag2 - 1] - st[car - 1] - liu) / d;
if((st[flag2 - 1] - st[car - 1] - liu) % d != 0)
{
oil4++;
}
if((st[flag2 - 1] - st[car - 1] - liu) % d != 0) liu = d - ((st[flag2 - 1] - st[car - 1] - liu) % d);
else liu = 0;
ans += oil4 * val[car];
car = flag2;
}
}
}
cout << ans;
return 0;
}