#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#define SF scanf
#define PF printf
#define MAXN 300010
using namespace std;
typedef long long ll;
int n;
ll L,ans,x[MAXN],t[MAXN];
pair<int,int> s[MAXN];
stack<int> q[2];
bool del[MAXN];
int main(){
    SF("%d%lld",&n,&L);
    for(int i=0;i<n;i++)
        SF("%lld",&x[i]);
    for(int i=0;i<n;i++){
        SF("%lld",&t[i]);
        ans+=(t[i]/(2ll*L))*2ll*L;
        t[i]%=(2ll*L);
    }
    //PF("[%lld]",ans);
    bool flag=0;
    for(int i=0;i<n;i++){
        if(t[i]!=0){
            flag=1;
            if(t[i]<=2ll*(L-x[i]))
                s[i].first=0;
            else
                s[i].first=1;
            if(t[i]<=2ll*x[i])
                s[i].second=0;
            else
                s[i].second=1;
        }
        else{
            s[i].first=s[i].second=1;
        }
    }
    for(int i=0;i<n;i++)
        if(s[i].first==1&&s[i].second==1){
            del[i]=1;
            if(t[i]!=0)
                ans+=2ll*L; 
            //PF("********(%lld %lld)******",t[i],x[i]);
        }
    for(int i=0;i<n-1;i++){
        if(del[i]==1)
            continue;
        if(s[i].first==0&&s[i].second==1){
            if(!q[1].empty()){
                del[q[1].top()]=1;
                del[i]=1;
                q[1].pop();
                ans+=2ll*L;
            }
            else if(!q[0].empty()){
                del[q[0].top()]=1;
                del[i]=1;
                q[0].pop();
                ans+=2ll*L;
            }
        }
        else if(s[i].second==0){
            q[s[i].first].push(i);
        }
    }
    while(!q[1].empty())
        q[1].pop();
    while(!q[0].empty())
        q[0].pop();
    //PF("{%lld}",ans);
    for(int i=0;i<n-1;i++){
        if(del[i]==1||(s[i].first==0&&s[i].second==1))
            continue;
        if(s[i].first==0){
            if(!q[1].empty()){
                del[i]=1;
                del[q[1].top()]=1;
                q[1].pop();
                ans+=2ll*L;
            }
            else if(!q[0].empty()){
                del[i]=1;
                del[q[0].top()]=1;
                q[0].pop();
                ans+=2ll*L;
            }
            else
                q[0].push(i);
        }
        else
            q[1].push(i);
    }
    if(s[n-1].first==0&&del[n-1]==0){
        for(int i=0;i<n-1;i++)
            if(del[i]==0&&s[i].second==0){
                del[i]=1;
                del[n-1]=1;
                ans+=2ll*L;
                break;
            }
    }
    /*for(int i=0;i<n;i++)
        PF("[%d %d %d]\n",s[i].first,s[i].second,del[i]);
    PF("{%lld}",ans);*/
    ll res=0,sum=0;
    for(int i=0;i<n;i++)
        if(del[i]==0)
            sum++;
    if(del[n-1]==0){
        if(s[n-1].first==1&&s[n-1].second==0)
            res=sum+1;
        else
            res=sum;
    }
    if(del[n-1]==1)
        res=sum+1;
    ans+=res*2ll*L;
    PF("%lld",ans);
} 
