import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n;
long d;
n = scanner.nextInt();
d = scanner.nextLong();
Bank [] banks = new Bank [n];
for (int i = 0; i < n; i++) {
long a = scanner.nextLong();
long b = scanner.nextLong();
banks[i] = new Main.Bank(a,b);
}
//按钱逆排序,钱最多的在最前面,之后只要从最前面往后开始找符合距离d的就行
Arrays.sort(banks, Comparator.comparingLong(o -> -1*o.money));
long res = 0;
for (int i = 0; i < banks.length; i++) {
for (int j = i+1; j < banks.length; j++) {
if (Math.abs(banks[j].position - banks[i].position) >= d) {
res = Math.max(res, banks[i].money + banks[j].money);
break; //因为是按钱逆序的,所以最先找到的就是最大的
}
}
}
System.out.println(res);
scanner.close();
}
static class Bank{
private long position;
private long money;
public Bank() {
super();
}
public Bank(long position, long money) {
super();
this.position = position;
this.money = money;
}
}
}