#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 205;
int x[maxn], t[maxn], dp[maxn][maxn][maxn][2];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m; cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> x[i];
for(int i = 1; i <= n; i++) cin >> t[i];
auto cost = [&](int l, int r){
return min(x[r] - x[l], m - x[r] + x[l]);
};
memset(dp, 0x3f, sizeof(dp));
int inf = dp[0][0][0][0];
dp[0][n + 1][0][0] = dp[0][n + 1][0][1] = 0;
x[n + 1] = m;
for(int l = 0; l <= n; l++){
for(int r = n + 1; r >= l + 1; r--){
for(int k = l + n + 1 - r; k >= 0; k--){
for(int dir = 0; dir <= 1; dir++){
if(dp[l][r][k][dir] == inf) continue;
dp[l + 1][r][k][0] = min(dp[l + 1][r][k][0], dp[l][r][k][dir] + (dir == 0 ? cost(l, l + 1) : cost(l + 1, r)));
dp[l][r - 1][k][1] = min(dp[l][r - 1][k][1], dp[l][r][k][dir] + (dir == 0 ? cost(l, r - 1) : cost(r - 1, r)));
if(dp[l + 1][r][k][0] <= t[l + 1]) dp[l + 1][r][k + 1][0] = min(dp[l + 1][r][k + 1][0], dp[l + 1][r][k][0]);
if(dp[l][r - 1][k][1] <= t[r - 1]) dp[l][r - 1][k + 1][1] = min(dp[l][r - 1][k + 1][1], dp[l][r - 1][k][1]);
}
}
}
}
for(int k = n; k >= 0; k--){
for(int l = 0; l <= n; l++){
for(int r = n + 1; r >= l + 1; r--){
for(int dir = 0; dir <= 1; dir++){
if (dp[l][r][k][dir] < inf){
cout << k;
exit(0);
}
}
}
}
}
}