#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
long long k;
cin >> n >> k;
vector<long long> a(n + 1), b(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
// 初始化状态
long long dp_T = a[1]; // 在表世界点1的金币数
long long dp_B = LLONG_MIN; // 在里世界点1不可达
for(int i=2;i<=n;i++){
long long new_T=dp_T+a[i];
if(dp_B>=k){
new_T= max(new_T,dp_B+a[i]-k);
}
long long new_B;
if(dp_B>LLONG_MIN/2){
new_B= dp_B+b[i];
}else{
new_B=LLONG_MIN;
}
if(dp_T>=k){
new_B=max(new_B,dp_T+b[i]-k);
}
dp_T = new_T;
dp_B = new_B;
}
cout << max(dp_T, dp_B) << endl;
return 0;
}