#include<iostream>
#include<iomanip>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int n,L,x[300005],t[300005],l[300005],r[300005];
bool vis[300005];
long long ans=0;
int read()
{
	char c=getchar();
	int res=0,bj=1;
	while(c<'0'||c>'9'){if(c=='-') bj=-1;c=getchar();}
	while(c>='0'&&c<='9') res=(res<<1)+(res<<3)+(c^48),c=getchar();
	return res*bj;
}
int main()
{
	n=read(),L=read();ans=n+1;
	for(int i=1;i<=n;i++) x[i]=read();
	for(int i=1;i<=n;i++)
	{
		t[i]=read();
		ans+=t[i]/(L<<1);t[i]%=(L<<1);
	}
	for(int i=1;i<=n;i++)
	{
		if(!t[i])
		{
			ans--;vis[i]=1;
			continue;
		}
		l[i]=2*(L-x[i])>=t[i];r[i]=2*x[i]>=t[i];
		vis[i]=!(l[i]|r[i]);
	}
	ans-=l[n];
	int pos=n,num=0,sum=0;
	for(int i=1;i<n;i++)
	{
		if(vis[i]) continue;
		if(!l[i])
		{
			pos=i;
			break;
		}
		if(r[i]) num++;
		else
		{
			if(num) num--,ans--;
		}
	}
	sum=num,num=0;
	for(int i=n-1;i>=pos;i--)
	{
		if(vis[i]) continue;
		if(!r[i]) break;
		if(l[i]) num++;
		else
		{
			if(num) num--,ans--;
		}
	}
	printf("%lld\n",2ll*L*(ans-(sum+num)/2));
}