신호등

신호 주기가 P초인 교차로마다 진입한 도로에 따라 정해진 순서로만 통과할 때 출발 교차로에서 도착 교차로까지 가장 빠른 이동 시간을 구합니다.

보통7최단 경로그래프아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

다익스트라 알고리즘은 음수 가중치를 갖는 변이 없는 그래프에서 출발점과 도착점 사이의 최단 경로를 구한다. 꼭짓점이 교차로를 나타내고 변이 두 교차로를 잇는 도로의 길이를 나타내면, 두 교차로 사이의 최단 경로를 이 알고리즘으로 구할 수 있다.

그러나 실제 도로에는 교차로마다 신호등이 있어서 교차로를 언제나 지날 수 있는 것은 아니다. 그래서 최단 경로가 아닌 길로 우회하는 편이 목적지에 더 빨리 닿기도 한다.

신호등은 PP초를 주기로 신호가 바뀐다. 교차로 ii와 연결된 교차로의 번호를 x1<x2<<xnx_1 < x_2 < \cdots < x_n이라 하자. 처음 PP초 동안은 x1x_1에서 온 차만 ii를 거쳐 x2,,xnx_2, \ldots, x_n으로 갈 수 있고, 그다음 PP초 동안은 x2x_2에서 온 차만 ii를 거쳐 x1,x3,,xnx_1, x_3, \ldots, x_n으로 갈 수 있다. 이렇게 교차로 번호가 작은 쪽부터 PP초씩 차례로 ii를 지날 권한을 얻고, n×Pn \times P초가 지나면 다시 x1x_1 차례로 돌아온다. xkx_k에서 온 차는 xkx_k를 뺀 나머지 교차로로만 갈 수 있다.

(a)(b)(c)

예를 들어 교차로 3번과 연결된 교차로가 1번, 4번, 5번이면, 0초 이상 PP초 미만에는 그림 (a)처럼 1번 교차로에서 온 차가 3번 교차로를 거쳐 다른 교차로로 갈 수 있다. PP초 이상 2P2P초 미만에는 그림 (b)처럼 4번 교차로에서 온 차가 갈 수 있고, 2P2P초 이상 3P3P초 미만에는 그림 (c)처럼 5번 교차로에서 온 차가 1번이나 4번 교차로로 갈 수 있다. 3P3P초 이상 4P4P초 미만에는 다시 (a)와 같은 상태가 된다.

다음 조건에서 자동차가 출발 교차로에서 도착 교차로까지 가는 최소 시간을 구한다.

  • 자동차는 1초에 길이 1만큼 이동한다.
  • 출발지와 목적지는 모두 교차로다.
  • 모든 신호등은 자동차가 출발하는 순간에 함께 동작을 시작한다.
  • 출발 교차로와 도착 교차로에서는 신호를 기다리지 않는다.
  • 어떤 교차로에서 같은 교차로로 돌아오는 도로는 없다.

예를 들어 위 도로망에서 출발 교차로가 1번이고 도착 교차로가 4번이라 하자. 1번 교차로에서 출발한 차는 10초에 3번 교차로에 도착한다. 3번 교차로의 주기가 2초라면 10초 이상 12초 미만에는 5번 교차로에서 온 차만 도로를 이용할 수 있으므로, 1번 교차로에서 온 차는 12초까지 기다려야 한다. 따라서 1번 교차로에서 4번 교차로까지 가는 데 14초가 걸린다.

모든 도로의 길이와 신호등 주기가 주어질 때, 출발 교차로에서 도착 교차로까지 가는 최소 시간을 구하여라.

입력

첫째 줄에 테스트 케이스의 개수 TT (1T101 \le T \le 10)가 주어진다.

각 테스트 케이스의 첫째 줄에는 교차로의 수 NN (1N1051 \le N \le 10^5), 도로의 수 MM (0M1050 \le M \le 10^5), 출발 교차로의 번호 SS (1SN1 \le S \le N), 도착 교차로의 번호 DD (1DN1 \le D \le N)가 주어진다.

이어지는 MM개의 줄에는 aa, bb, cc (1a,bN1 \le a, b \le N, aba \ne b, 1c1051 \le c \le 10^5)가 주어진다. aa번 교차로와 bb번 교차로를 잇는 길이 cc의 양방향 도로가 있다는 뜻이다.

그다음 줄에는 각 교차로의 신호등 주기 P1,P2,,PNP_1, P_2, \ldots, P_N (1Pi1001 \le P_i \le 100)이 공백 하나로 구분되어 주어진다.

두 교차로 사이에 도로는 많아야 하나 있다.

출력

각 테스트 케이스마다 출발 교차로에서 도착 교차로까지 가는 데 걸리는 최소 시간을 한 줄에 출력한다. 결과가 32비트 정수 범위를 넘을 수 있으므로 64비트 정수형을 쓰기를 권한다. 도착 교차로로 갈 수 있는 경로가 없으면 -1을 출력한다.