์ ๋ฌผ ๊ฐ๊ฒฉ๋ค์ D์ด์์ด ์ฐจ์ด๋๋ฉด ์ ๋๋ค. ์ต๋ ๊ฐ๊ณผ ์ต์๊ฐ์ ๊ฐ๊ฒฉ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ํด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ด D์ด์์ด ๋๋ฉด ๋ ์ค ํ๋๋ฅผ ๋นผ์ผ ํ๋ค.
์ด๋ N์ด 10๋ง์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์กฐํฉํด์ ๊ตฌํ๋ ๊ฒ์ 2์ด ๋ด์ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋์ ์ ๋ฌผ์ ๊ฐ๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ๊ฒ์ ๋ฃ์ ๊ฒ์ด๊ณ ๋บ ๊ฒ์ธ์ง ์ ํ ์ ์์ผ๋ฏ๋ก ์ ๋ฌผ ๊ฐ๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ ์ฐจ๋ก๋๋ก ํ๋์ฉ ์ ๋ฌผ์ ์ฃผ๋ฉด์ ๋ง์กฑ๋์ ํฉ์ ๊ตฌํ๋ค. ๊ทธ๋ฌ๋ค๊ฐ ํ์ฌ ๋ฃ์ผ๋ ค๊ณ ํ๋ ์ ๋ฌผ์ ๊ฐ๊ฒฉ์ด ํ์ฌ ๊ฐ๋ฏผ์ด์๊ฒ ์ฃผ๋ ค๊ณ ํ๋ ์ ๋ฌผ๋ค ๊ฐ์ด๋ฐ ์ต์์ธ ๊ฐ๊ฒฉ๊ณผ D์ด์ ์ฐจ์ด๋ ๊ฒฝ์ฐ ์ต์ ๊ฐ๊ฒฉ์ ์ ๋ฌผ์ ํด๋นํ๋ ๋ง์กฑ๋๋ฅผ ์ ๊ฑฐํ๋ค.
ํด๋น ๊ณผ์ ์ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํ์ดํ๋ค.
import java.util.*;
import java.io.*;
public class Main {
static final int MOD = 1_000_000_007;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int D = Integer.parseInt(st.nextToken());
int P;
int V;
int[][] gifts = new int[N][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
P = Integer.parseInt(st.nextToken());
V = Integer.parseInt(st.nextToken());
gifts[i][0] = P;
gifts[i][1] = V;
}
Arrays.sort(gifts, (o1, o2) -> o1[0] - o2[0]);
int low = 0;
long maxSum = 0;
long tmpSum = 0;
for (int i = 0; i < N; i++) {
tmpSum += gifts[i][1];
while (gifts[i][0] >= gifts[low][0] + D) {
tmpSum -= gifts[low][1];
low++;
}
maxSum = Math.max(maxSum, tmpSum);
}
System.out.println(maxSum);
}
}