def tokyo_and_kyoto(inp=None): if inp == None: n,d= map(int,input().split()) else: inp_l = inp.split("\n") n, d = map(int,inp_l.pop(0).split()) heap = [[0,0]] for _ in range(n): l = len(heap) if inp == None: a,b =map(int,input().split()) else: a, b = map(int, inp_l.pop(0).split()) for _ in range(l): cur, money =heap.pop(0) if cur == 0: heap.append([0,money+a]) heap.append([1,money+b-d]) elif cur == 1: heap.append([0,money+a-d]) heap.append([1,money+b]) return max(heap,key= lambda x:x[1])[1] if __name__ == "__main__": print(tokyo_and_kyoto())