import bisect def main(): import sys input = sys.stdin.read data = input().split() idx = 0 n = int(data[idx]) idx += 1 k = int(data[idx]) idx += 1 tasks = [] for _ in range(n): t = int(data[idx]) idx += 1 d = int(data[idx]) idx += 1 tasks.append((t, d)) # Sort tasks by descending D, ascending T tasks.sort(key=lambda x: (-x[1], x[0])) y_list = [] selected = [] for t, d in tasks: idx_ins = bisect.bisect_left(y_list, t) ok = True # Check left neighbor if idx_ins > 0: if t - y_list[idx_ins - 1] < k: ok = False # Check right neighbor if idx_ins < len(y_list): if y_list[idx_ins] - t < k: ok = False if ok: bisect.insort(y_list, t) selected.append(t) # Collect Ame's tasks max_d = 0 total = 0 selected_set = set(selected) for t, d in tasks: if t not in selected_set: if d > max_d: max_d = d total += d print(max_d) print(total) if __name__ == '__main__': main()