#include<bits/stdc++.h>
#define pt putchar(' ')
#define nl puts("")
#define pi pair<int,int>
#define fi first
#define se second
#define pb push_back
#define go(it) for(auto &it:as[x])
using namespace std;
int fr(){
int x=0,flag=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=x*10+(ch-'0');
ch=getchar();
}
return x*flag;
}
void fw(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) fw(x/10);
putchar(x%10+'0');
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
const int N=510;
int n,m,ans;
int f[N][N][2],g[N][N][2];
pi pos[N];
int main()
{
n=fr(),m=fr();
for(int i=1;i<=n;i++) pos[i].fi=fr();
for(int i=1;i<=n;i++) pos[i].se=fr(); 、、截止时间
pos[++n]={0,0};
for(int i=1;i<=n;i++)
pos[i+n]=pos[i],pos[i+n].fi+=m;
sort(pos+1,pos+1+n*2);
memset(g,0x3f,sizeof g);
memset(f,-0x3f,sizeof f);
g[n+1][n+1][0]=g[n+1][n+1][1]=0;
f[n+1][n+1][0]=f[n+1][n+1][1]=0;
for(int len=2;len<=n*2;len++)
for(int i=1;i+len-1<=n*2;i++)
{
int j=i+len-1;
int &x=f[i][j][0],&y=f[i][j][1],&a=g[i][j][0],&b=g[i][j][1];
if(x<f[i+1][j][0]+(g[i+1][j][0]+pos[i+1].fi-pos[i].fi<=pos[i].se))
{
x=f[i+1][j][0]+(g[i+1][j][0]+pos[i+1].fi-pos[i].fi<=pos[i].se);
a=g[i+1][j][0]+pos[i+1].fi-pos[i].fi;
}
else if(x==f[i+1][j][0]+(g[i+1][j][0]+pos[i+1].fi-pos[i].fi<=pos[i].se))
a=min(a,g[i+1][j][0]+pos[i+1].fi-pos[i].fi);
if(x<f[i+1][j][1]+(g[i+1][j][1]+pos[j].fi-pos[i].fi<=pos[i].se))
{
x=f[i+1][j][1]+(g[i+1][j][1]+pos[j].fi-pos[i].fi<=pos[i].se);
a=g[i+1][j][1]+pos[j].fi-pos[i].fi;
}
else if(x==f[i+1][j][1]+(g[i+1][j][1]+pos[j].fi-pos[i].fi<=pos[i].se))
a=min(a,g[i+1][j][1]+pos[j].fi-pos[i].fi);
if(y<f[i][j-1][0]+(g[i][j-1][0]+pos[j].fi-pos[i].fi<=pos[j].se))
{
y=f[i][j-1][0]+(g[i][j-1][0]+pos[j].fi-pos[i].fi<=pos[j].se);
b=g[i][j-1][0]+pos[j].fi-pos[i].fi;
}
else if(y==f[i][j-1][0]+(g[i][j-1][0]+pos[j].fi-pos[i].fi<=pos[j].se))
b=min(b,g[i][j-1][0]+pos[j].fi-pos[i].fi);
if(y<f[i][j-1][1]+(g[i][j-1][1]+pos[j].fi-pos[j-1].fi<=pos[j].se))
{
y=f[i][j-1][1]+(g[i][j-1][1]+pos[j].fi-pos[j-1].fi<=pos[j].se);
b=g[i][j-1][1]+pos[j].fi-pos[j-1].fi;
}
else if(y==f[i][j-1][1]+(g[i][j-1][1]+pos[j].fi-pos[j-1].fi<=pos[j].se))
b=min(b,g[i][j-1][1]+pos[j].fi-pos[j-1].fi);
}
for(int i=1;i<=n;i++)
ans=max({ans,f[i][i+n-1][0],f[i][i+n-1][1]});
fw(min(n-1,ans));
return 0;
}