첫 차 타기

문제

현재 1번 건물에 있는 세우는 막차를 놓쳐버렸다. 그래서 세우네 집인 N번 건물까지 걸어가기로 했다. 그러다 세우는 1번 건물에서 출발할 때, 지금부터 정확히 K분 후부터 버스 첫 차가 운행하기 시작한다는 것을 깨달았다.

세우네 도시에는 양방향으로 서로 다른 두 개의 건물을 연결하는 X개의 인도와 Y개의 차도가 있다. 첫 차가 운행하기 시작하는 K분 이전에는 인도로만 이동할 수 있고, K분 후부터는 인도로 이동하거나, 버스를 타고 차도로 이동할 수 있다.

세우가 1번 건물에서 출발해 N번 건물까지 도착하는 데 걸리는 최소 시간을 구하는 프로그램을 작성해 보자.

입력

첫 번째 줄에 각각 건물의 개수, 버스 첫 차가 운행하기 시작하는 시간, 인도의 개수, 차도의 개수를 의미하는 정수 N, K, X, Y가 공백으로 구분되어 주어진다. (3N200 000; 1X, Y200 000; 1K109)

X개의 줄에 걸쳐, 1+i번째 줄에는 각각 i번째 인도가 연결하는 두 건물과 이동 시간을 뜻하는 정수 si, ei, di가 공백으로 구분되어 주어진다. 임의의 i에 대해 si번 건물에서 ei번 건물로 가는 인도는 유일하다. (1si, eiN; siei; 1di109)

Y개의 줄에 걸쳐, X+1+i번째 줄에는 각각 i번째 차도가 연결하는 두 건물과 이동 시간을 뜻하는 정수 si, ei, di가 공백으로 구분되어 주어진다. 임의의 i에 대해 si번 건물에서 ei번 건물로 가는 차도는 유일하다. (1si, eiN; siei; 1di109)

세우가 1번 건물에서 출발하여 N번 건물까지 도착할 수 있음이 보장된다.

출력

첫 번째 줄에 1번 건물에서 출발해 N번 건물까지 도착하는 데 걸리는 최소 시간을 출력한다.

예제 입력 1 복사

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

예제 출력 1 복사

6