import java.util.;
import java.math.;
import java.util.stream.*;
public class Main {
static class Node{
int val=0;
int coordinate =0;
Node(int coordinate,int val){
this.val=val;
this.coordinate=coordinate;
}
}
public int findMaxMoney(){
Scanner in = new Scanner(System.in);
int amount=0;
int distance=0;
String[] amountAnddistance = in.nextLine().split(" ");
amount = Integer.valueOf(amountAnddistance[0]);
distance = Integer.valueOf(amountAnddistance[1]);
Node[] nodes = new Node[amount];
for (int i=0;i<amount;i++){
String[] coordinateAndVal = in.nextLine().split(" ");
int coordinate =Integer.valueOf(coordinateAndVal[0]);
int val = Integer.valueOf(coordinateAndVal[1]);
nodes[i]=new Node(coordinate,val);
}
Arrays.sort(nodes,(node1,node2)->node2.val-node1.val);
return coreFindMax(nodes,0,nodes.length-1,distance);
}
int coreFindMax(Node[] nodes,int begin, int end,int distance){
if (begin>=end)
return 0;
int maxSum =0;
for (int i=begin+1;i<=end;i++){
if (Math.abs(nodes[begin].coordinate-nodes[i].coordinate)>=distance) {
maxSum = nodes[begin].val + nodes[i].val;
end = i;
break;
}
}
maxSum = Math.max(maxSum,coreFindMax(nodes,begin+1,end,distance));
return maxSum;
}
public static void main(String[] args) {
Main sol = new Main();
System.out.println(sol.findMaxMoney());
}
}