막대기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

길이가 서로 다른 여러 막대기로 즐기는 게임이 있다. 게임을 시작하기 전에 간격이 LL인 두 개의 평행한 수평선을 책상 위에 긋고, 각 막대기의 두 끝이 위쪽 수평선과 아래쪽 수평선에 하나씩 놓이도록 배치한다. 여러 막대기의 끝이 수평선 위의 한 점에서 만날 수는 있지만, 두 막대기가 완전히 겹치는 경우는 없다.

각 막대기는 (t,d)(t, d)로 나타낸다. 여기서 tt는 위쪽 수평선에서의 좌표, dd는 아래쪽 수평선에서의 좌표이다. 아래 그림 1에서 막대기 aa(1,0)(1, 0), 막대기 bb(6,0)(6, 0)이다.

그림 1: 두 수평선 사이에 놓인 막대기들

게임의 목표는 놓여 있는 막대기 중 일부를 들어내어, 남은 막대기들이 다음 세 조건을 모두 만족하는 하나의 지그재그 선을 이루도록 하는 것이다.

  1. 막대기들은 끝점에서만 맞닿고, 그 외에는 서로 교차하지 않는다.
  2. 한 점에서 세 개 이상의 막대기 끝이 만나지 않는다.
  3. 모든 막대기가 서로 연결되어 있다.

이 게임의 승자는 가장 긴 지그재그 선을 만든 사람이다. 지그재그 선의 길이는 그것을 이루는 막대기 길이의 합이며, 막대기 하나의 길이는 두 끝점 사이의 수평 거리와 수직 거리를 더한 값이다. 막대기 (t,d)(t, d)의 수평 거리는 td|t - d|이고, 수직 거리는 두 수평선 사이의 간격인 LL이다. 위 그림에서 각 막대기의 길이는 다음과 같다.

막대기aabbccddeeffgg
길이4964473

예를 들어 그림 1에서 막대기 a,b,ea, b, e만 남기면 세 조건을 모두 만족하는 지그재그 선이 되고 길이는 4+9+4=174 + 9 + 4 = 17이다. 막대기 c,ec, e만 남겨도 세 조건을 모두 만족하며 길이는 6+4=106 + 4 = 10이다. 막대기 b,cb, c만 남기면 조건 1을, 막대기 c,d,ec, d, e만 남기면 조건 2를, 막대기 a,b,ga, b, g만 남기면 조건 3을 위반한다. 가장 긴 지그재그 선은 막대기 c,d,f,gc, d, f, g로 이루어지며 길이는 6+4+7+3=206 + 4 + 7 + 3 = 20이다.

막대기들의 초기 배치가 주어질 때, 만들 수 있는 가장 긴 지그재그 선의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 막대기의 개수 NN과 두 수평선 사이의 간격 LL이 공백을 사이에 두고 주어진다. 1N100,0001 \le N \le 100{,}000이고 1L1,000,0001 \le L \le 1{,}000{,}000이다.

다음 NN개의 줄에는 각 줄마다 막대기 하나를 나타내는 두 정수 ttdd가 공백을 사이에 두고 주어진다. 0t,d100,000,0000 \le t, d \le 100{,}000{,}000이다. 입력으로 주어지는 어떤 두 막대기도 완전히 겹치지 않는다.

출력

만들 수 있는 가장 긴 지그재그 선의 길이를 한 줄에 출력한다.

힌트

중간 계산 값과 정답이 32비트 정수 범위를 벗어날 수 있으므로 64비트 정수 자료형을 사용하는 것을 권장한다.