#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <tuple>
#include <math.h>
#include <cstring>
#include <bitset>
#include <set>
#include <map>
#define int long long
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define endl '\n'
#define f first
#define s second
#define all(x) begin(x),end(x)
#define m_p make_pair
signed main(){
int n;cin >> n;
int m;cin >> m;
vector<int> vc(n);
vector<pii> vc2(n);
for(int i{};i < n;i++){
int g;cin >> g;
vc[i] = g;
vc2[i].f = m-g;
}
for(int i{};i < n;i++){
int g;cin >> g;
vc[i] -= g;
vc2[i].s = g;
}
sort(all(vc));
sort(all(vc2));
// for(int i{};i < n;i++){
// cout << vc[i] << " ";
// }
// for(int i{};i <n;i++){
// cout << vc2[i].f << " " << vc2[i].s << endl;
// }
//cout << endl;
int ans = upper_bound(all(vc),0)-vc.begin();
int cur = 0;
for(int i{};i < n;i++){
int val = vc2[i].f;
if(val <= vc2[i].s) cur++;
int pos = upper_bound(all(vc),-val*2)-vc.begin();
//cout << val << " " << cur << " " << pos << endl;
ans = max(ans,cur+pos);
}
cout << ans;
}