#include<bits/stdc++.h>
using namespace std;
inline int read(){
	register int x=0,f=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')	f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')	x=x*10+(ch^48),ch=getchar();
	return x*f;
}
const int N=3e5+5;
int n,L,x[N],t[N],l[N],r[N],vi[N];
int main(){
	int ans=0;
	n=read(),L=read(),ans=n+1;
	for(int i=1;i<=n;i++)	x[i]=read();
	for(int i=1;i<=n;i++){
		ans+=(t[i]=read())/(2*L);
		t[i]%=2*L;
	}
	for(int i=1;i<=n;i++)	l[i]=(x[i]*2>=t[i]);
	for(int i=1;i<=n;i++)	r[i]=((L*2-x[i]*2)>=t[i]);
	for(int i=1;i<=n;i++){
		if(!t[i])	vi[i]=1,--ans;
		if(!r[i]&&!l[i])	vi[i]=1;
	}
	if(t[n])	ans-=r[n];
	int sum=0,pos=n,top=0;
	for(int i=1;i<n;i++){
		if(vi[i])	continue;
		if(!r[i]){
			pos=i; break;
		}
		l[i]?++top:(top?--top,--ans:0);
	}
	sum=top,top=0;
	for(int i=n-1;i>=pos;i--){
		if(vi[i])	continue;
		r[i]?++top:(top?--top,--ans:0);
	}
	printf("%lld\n",2LL*L*(ans-(sum+top)/2));
	return 0;
}
