//Believe in yourself ,( try and try and then try ), You can do it
//You don't have to be great to start but you have to start to be great
#include <iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include <utility>
#include <stack>
#include <set>
#include <map>
#include<queue>
#include<set>
// 2D vector vector<vector<int>>v(n,vector<int>(m));
// sort and reverse in vector sort(v.begin(), v.end(), greater<int>());
// str.erase(pos,len); erase in string
// a = s.substr(0, i)<<before i, b = s.substr(i)<<from i to end;
// cout << (v[0] == 1 ? "YES" : "NO") << endl;
// unsigned long long int
// priority_queue<ll, vector<ll>, greater<ll>> p;
using namespace std;
#define ll long long
#define all(c) c.begin(),c.end()
ll gcd(ll a, ll b)
{
while (b != 0)
{
ll a2 = a;
a = b; b = a2 % b;
}
return a;
}
ll lcm(ll a, ll b)
{
return a / gcd(a, b) * b;
}
void soso()
{
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
}
ll n, d; pair<ll,ll>arr[200005];
ll can(ll mid)
{
ll sum = 0, ma = 0;
for (int i = 1; i <= n; i++)
{
if (arr[(mid - 1) + i].first - arr[i].first < d)
{
sum = arr[(mid - 1) + i].second - arr[i - 1].second;
ma = max(sum, ma);
}
}
return ma;
}
int main()
{
soso();
cin >> n >> d;
for (int i = 1; i <= n; i++)cin >> arr[i].first >> arr[i].second;
sort(arr, arr + n+1);
for (int i = 1; i <= n; i++)arr[i].second += arr[i - 1].second;
ll l = 1, r = n, ans = 0;
while (l <= r)
{
ll mid = (l + r) / 2;
cout << mid << "\n";
ll f = can(mid);
if (can(mid))
{
l = mid + 1;
ans = max(f, ans);
}
else
r = mid - 1;
}
cout << ans;
}
Ly9CZWxpZXZlIGluIHlvdXJzZWxmICwoIHRyeSBhbmQgdHJ5IGFuZCB0aGVuIHRyeSApLCBZb3UgY2FuIGRvIGl0IAovL1lvdSBkb24ndCBoYXZlIHRvIGJlIGdyZWF0IHRvIHN0YXJ0IGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB0byBiZSBncmVhdCAKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPHNldD4KLy8gMkQgdmVjdG9yIHZlY3Rvcjx2ZWN0b3I8aW50Pj52KG4sdmVjdG9yPGludD4obSkpOwovLyBzb3J0IGFuZCByZXZlcnNlIGluIHZlY3RvciBzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgZ3JlYXRlcjxpbnQ+KCkpOwovLyBzdHIuZXJhc2UocG9zLGxlbik7IGVyYXNlIGluIHN0cmluZwovLyBhID0gcy5zdWJzdHIoMCwgaSk8PGJlZm9yZSBpLCBiID0gcy5zdWJzdHIoaSk8PGZyb20gaSB0byBlbmQ7Ci8vIGNvdXQgPDwgKHZbMF0gPT0gMSA/ICJZRVMiIDogIk5PIikgPDwgZW5kbDsKLy8gdW5zaWduZWQgbG9uZyBsb25nIGludAovLyBwcmlvcml0eV9xdWV1ZTxsbCwgdmVjdG9yPGxsPiwgZ3JlYXRlcjxsbD4+IHA7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKGMpICBjLmJlZ2luKCksYy5lbmQoKQoKCmxsIGdjZChsbCBhLCBsbCBiKQp7CiAgICB3aGlsZSAoYiAhPSAwKQogICAgewogICAgICAgIGxsIGEyID0gYTsKICAgICAgICBhID0gYjsgICAgICAgIGIgPSBhMiAlIGI7CiAgICB9CiAgICByZXR1cm4gIGE7Cn0KCmxsIGxjbShsbCBhLCBsbCBiKQp7CiAgICByZXR1cm4gYSAvIGdjZChhLCBiKSAqIGI7Cn0KCnZvaWQgc29zbygpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwp9CmxsIG4sIGQ7IHBhaXI8bGwsbGw+YXJyWzIwMDAwNV07CgpsbCBjYW4obGwgbWlkKQp7CiAgICBsbCBzdW0gPSAwLCBtYSA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgaWYgKGFyclsobWlkIC0gMSkgKyBpXS5maXJzdCAtIGFycltpXS5maXJzdCA8IGQpCiAgICAgICAgewogICAgICAgICAgICBzdW0gPSBhcnJbKG1pZCAtIDEpICsgaV0uc2Vjb25kIC0gYXJyW2kgLSAxXS5zZWNvbmQ7CiAgICAgICAgICAgIG1hID0gbWF4KHN1bSwgbWEpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYTsKfQppbnQgbWFpbigpCnsKICAgIHNvc28oKTsKICAgIGNpbiA+PiBuID4+IGQ7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspY2luID4+IGFycltpXS5maXJzdCA+PiBhcnJbaV0uc2Vjb25kOwogICAgc29ydChhcnIsIGFyciArIG4rMSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspYXJyW2ldLnNlY29uZCArPSBhcnJbaSAtIDFdLnNlY29uZDsKCiAgICBsbCBsID0gMSwgciA9IG4sIGFucyA9IDA7CgogICAgd2hpbGUgKGwgPD0gcikKICAgIHsKICAgICAgICBsbCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICBjb3V0IDw8IG1pZCA8PCAiXG4iOwogICAgICAgIGxsIGYgPSBjYW4obWlkKTsKICAgICAgICBpZiAoY2FuKG1pZCkpCiAgICAgICAgewogICAgICAgICAgICBsID0gbWlkICsgMTsKICAgICAgICAgICAgYW5zID0gbWF4KGYsIGFucyk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgciA9IG1pZCAtIDE7CgogICAgfQogICAgY291dCA8PCBhbnM7Cn0=