#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;
}