//Hello!..
//dört böler altı artı iki ama ne böler altı ne böler iki
//Başarı, Boş Duranın Hakkı Değil... Koşturanın Hakkıdır. Hakan?
//Ne yapayım, elimden gelen bu :(
//S'il vous plait
#include <bits/stdc++.h>
using namespace std;
typedef long long lo;
#define fi first
#define se second
#define endl "\n"
#define pb push_back
#define int long long
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(int i=1;i<=n;i++)
#define setrandom mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define getrandom(a,b) uniform_int_distribution<int>(a,b)(rng)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)
#define _ << " " <<
const lo inf = 1000000000000000;
const lo li = 202;
const lo mod = 1000000007;
int n,m,a[li],k,flag,t,b[li],dp[li][li][li][2];
int cev;
string s;
vector<int> v;
inline int dist(int x,int y){
if(x>y)swap(x,y);
return min(y-x,x+k-y);
}
int32_t main(){
fio();
cin>>n>>k;
FOR cin>>a[i];
FOR cin>>b[i];
for(int i=0;i<=n+1;i++){
for(int j=0;j<=n+1;j++){
for(int ii=0;ii<=n;ii++)dp[i][j][ii][0]=inf,dp[i][j][ii][1]=inf;
}
}
dp[0][n+1][0][0]=0;
dp[0][n+1][0][1]=0;
for(int i=0;i<=n;i++){
for(int j=n+1;j>i;j--){
for(int ii=0;ii<=n;ii++){
if(i)dp[i][j][ii][0]=min(dp[i][j][ii][0],dp[i-1][j][ii][0]+dist(a[i],a[i-1]));
if(i)dp[i][j][ii][0]=min(dp[i][j][ii][0],dp[i-1][j][ii][1]+dist(a[i],a[j]));
if(j!=n+1)dp[i][j][ii][1]=min(dp[i][j][ii][1],dp[i][j+1][ii][1]+dist(a[j],a[j+1]));
if(j!=n+1)dp[i][j][ii][1]=min(dp[i][j][ii][1],dp[i][j+1][ii][0]+dist(a[j],a[i]));
//~ cerr<<i-1 _ j _ "AA" _ i _ j+1 _ "BB" _ ii _ endl;
//~ if(i==1 && ii==2 && j==6)cerr<<dp[i-1][j][ii-1][0] _ dp[i-1][j][ii-1][1] _ dist(a[i],a[i-1]) _ dist(a[i],a[j]) _ "AA\n";
if(ii && i && dp[i-1][j][ii-1][0]+dist(a[i],a[i-1])<=b[i])dp[i][j][ii][0]=min(dp[i][j][ii][0],dp[i-1][j][ii-1][0]+dist(a[i],a[i-1]));
if(ii && i && dp[i-1][j][ii-1][1]+dist(a[i],a[j])<=b[i])dp[i][j][ii][0]=min(dp[i][j][ii][0],dp[i-1][j][ii-1][1]+dist(a[i],a[j]));
if(ii && j!=n+1 && dp[i][j+1][ii-1][1]+dist(a[j],a[j+1])<=b[j])dp[i][j][ii][1]=min(dp[i][j][ii][1],dp[i][j+1][ii-1][1]+dist(a[j],a[j+1]));
if(ii && j!=n+1 && dp[i][j+1][ii-1][0]+dist(a[j],a[i])<=b[j])dp[i][j][ii][1]=min(dp[i][j][ii][1],dp[i][j+1][ii-1][0]+dist(a[j],a[i]));
}
}
}
//~ cerr<<dp[0][6][1] _ dp[0][5][2] _ dp[0][4][3] _ dp[0][3][4] _ "BB\n";
//~ cerr<<dp[0][6][1][1] _ dist(a[1],a[6]) _ "ABC"<<endl;
//~ cerr<<dp[1][6][2][0] _ dist(a[1],a[6]) _ "ABC"<<endl;
for(int ii=n;ii>=0;ii--){
for(int i=0;i<=n+1;i++){
for(int j=n+1;j>i;j--)if(dp[i][j][ii][0]!=inf || dp[i][j][ii][1]!=inf){cout<<ii<<endl;return 0;}
}
}
return 0;
}