풍선 점 잇기

부풀리는 시간을 정해 남은 시간 동안 n-1개의 구면 최단 경로를 그릴 때, 완성된 그림의 총 길이가 최대가 되도록 만든다.

보통7기하이분 탐색수학구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

점 잇기 놀이를 해 본 적이 있는가? 그림에 소질이 없는 사람도 점 잇기로는 근사한 그림을 그릴 수 있다. 종이에 점이 nn개 있고 각 점에는 11부터 nn까지의 정수가 하나씩 붙어 있다. 여기에 선분 n1n-1개를 긋는다. 11번과 22번을 잇고, 22번과 33번을 잇고, 33번과 44번을 잇는 식으로 끝까지 이어 나가면 그림이 완성된다. 다음은 점을 잇기 전과 후의 예다.

점 잇기 예시

이번에는 풍선 표면에 점 잇기 그림을 그리려고 한다. 풍선은 완전한 구라고 가정한다. 처음에 풍선의 반지름은 1센티미터다. 표면에 점 nn개를 그려 두고 각각 11번부터 nn번까지 번호를 매겼다. 풍선을 불수록 점 사이의 간격은 점점 벌어진다. 목표는 그림을 최대한 크게 만드는 것, 즉 선 n1n-1개의 길이 합을 최대로 만드는 것이다.

그림이 흐려지지 않도록 풍선을 먼저 끝까지 불고, 그 뒤에야 선 n1n-1개를 그린다. 풍선은 1분에 vv세제곱센티미터씩 부풀릴 수 있고, 선은 1분에 dd센티미터씩 그릴 수 있다. ii번 점에서 i+1i+1번 점으로 선을 그을 때는 풍선 표면을 따라 최단 경로로 긋는다. 최단 경로가 여러 개인 경우도 있지만, 이 문제는 길이만 따지므로 어느 쪽을 그리든 결과는 같다.

쓸 수 있는 시간은 모두 TT분이다. 풍선을 부는 시간과 선을 그리는 시간을 합쳐 TT분을 넘길 수 없다. 그리기를 마쳤을 때 선 n1n-1개는 모두 완성되어 있어야 한다. 그릴 수 있는 길이 합의 최댓값을 구하여라.

입력

첫째 줄에 정수 nn, TT, vv, dd가 주어진다. nn (2n10002 \le n \le 1000)은 점의 개수, TT (1T1061 \le T \le 10^6)는 풍선을 불고 선 n1n-1개를 그리는 데 쓸 수 있는 전체 시간(분), vv (1v10001 \le v \le 1000)는 1분에 부풀릴 수 있는 부피(세제곱센티미터), dd (1d10001 \le d \le 1000)는 1분에 그을 수 있는 선의 길이(센티미터)다.

다음 nn개 줄에는 11번부터 nn번까지 점의 위치가 순서대로 주어진다. 풍선의 중심은 원점이다. 각 줄에는 실수 xxyy, 정수 ss (s{1,1}s \in \{-1, 1\})가 주어진다. 점의 좌표는 (x,y,z)(x, y, z)이고 z=s1x2y2z = s\sqrt{1 - x^2 - y^2}이다. 0x2+y210 \le x^2 + y^2 \le 1이 보장되며 xxyy의 단위는 센티미터다. xxyy는 소수점 아래 최대 6자리까지 주어진다.

선끼리 서로 만나거나 완전히 겹칠 수 있다. 겹치는 부분은 겹친 횟수만큼 거듭 세어서 더한다. 반지름이 1인 풍선 위에 이 그림을 TT분 안에 그릴 수 있다는 것은 보장된다.

출력

그릴 수 있는 그림의 길이 합의 최댓값을 센티미터 단위로 출력한다. 소수점 아래 일곱째 자리에서 반올림하여 소수점 아래 여섯 자리를 정확히 출력한다.

힌트

x2+y2=1x^2 + y^2 = 1인 경우를 조심해야 한다. 1x2y21 - x^2 - y^2을 계산하면 부동소수점 오차 때문에 0.0000000001-0.0000000001처럼 아주 작은 음수가 나올 수 있고, 그러면 제곱근을 구하는 데 실패한다. 같은 이유로 두 점이 이루는 각의 코사인값도 [1,1][-1, 1]을 살짝 벗어날 수 있다. 아크코사인을 취하기 전에 값을 이 범위로 잘라 주면 안전하다.