메이플 월드 라이딩 여행

NYPC 2020 · 예선

메이플 월드는 NN 개의 마을로 구성되어 있다. 메이플 월드에서 라이딩을 타면, 비행 기능을 통해 현재 위치한 마을에서 출발해 일정 시간 후 다른 마을에 도착한다.

요정 웡키는 MM 종류의 라이딩을 가지고 있는데, ii 번 라이딩은 마을 uiu_i에서만 탈 수 있고 tit_i 초 후에 다른 마을 viv_i에 도착한다.

요정 웡키는 마을 SS에서 시작해 라이딩을 타고 서로 다른 마을을 여행하는 여행 계획을 세우려 한다. 이때, 여행 계획의 소요 시간은 라이딩을 타는 데 걸리는 시간의 총합이다.

요정 웡키는 여행 계획의 소요 시간이 너무 짧거나 긴 것을 원하지 않는다. 이를 위해 소요 시간이 KK 번째로 짧은 여행 계획의 소요 시간을 구하려 한다. 다시 말해, 가능한 모든 여행 계획을 소요 시간이 짧은 순으로 나열한 후 KK 번째 여행 계획의 소요 시간을 구하려 한다. 이때, 소요 시간이 같은 여행 계획은 임의의 순서로 나열한다.

<그림 1> 메이플 월드의 마을과 라이딩 예시
<그림 1> 메이플 월드의 마을과 라이딩 예시

예를 들어, 메이플 월드의 마을 44개와 라이딩 66종류가 <그림 1>과 같을 때, 마을 11에서 시작해서 소요 시간이 44번째로 짧은 여행 계획의 소요 시간을 구해보자.

<그림 2> 가능한 여행 계획
<그림 2> 가능한 여행 계획

<그림 2>와 같이 88가지 여행 계획이 가능하고, 소요 시간이 44번째로 짧은 여행계획의 소요 시간은 55초이다.

요정 웡키를 대신해서 서로 다른 마을을 방문하는 소요 시간이 KK 번째로 짧은 여행 계획이 존재하는지, 만약 존재한다면 그 여행 계획의 소요 시간을 출력하는 프로그램을 작성하여라.

입력 형식

첫 줄에 네 개의 정수 NN, MM, KK, SS가 공백으로 구분되어 주어진다. (1N,M,K100000;(1 \le N, M, K \le 100\,000; 1SN)1 \le S \le N)

이후 MM 개의 줄에 대해 ii번 라이딩의 정보를 나타내는 세 개의 정수 uiu_i, viv_i, tit_i가 공백으로 구분되어 주어진다. (1ui,viN;(1 \le u_i, v_i \le N; 1ti1000000000)1 \le t_i \le 1\,000\,000\,000)

여기서, 모든 ii에 대해 uiviu_i \ne v_i이며, 모든 서로 다른 ii, jj 쌍에 대해 uiuju_i \ne u_j 혹은 vivjv_i \neq v_j이다. 또한, 마을 SS에서 출발하여 도달할 수 없는 마을은 없다.

출력 형식

첫 줄에 소요 시간이 KK 번째로 짧은 여행 계획의 소요 시간을 출력한다.

만약 소요 시간이 KK 번째로 짧은 여행 계획이 존재하지 않는다면 -1을 출력한다.

예제

입력

4 6 4 1 1 2 3 1 4 4 2 3 5 2 4 2 3 4 3 4 3 1

출력

5

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 7

K10000;K \le 10\,000; ui<vi;u_i \lt v_i; M=N1M = N-1

종류 2: 17

K10000;K \le 10\,000; ui<viu_i \lt v_i

종류 3: 30

K10000K \le 10\,000

종류 4: 46

추가적인 제한 조건이 없음.

해설