#1758 현금인출기

13  10 s   128 MB  

Description

 

ASP시에는 모든 도로들이 일방통행으로 되어 있다. 도로들이 만나는 모든 교차로에는 ANSI은행의 현금입출금기(ATM)가 설치되어 있다. ASP시에는 유명한 레스토랑 체인인 뷥수가 있다. 이 레스토랑의 각 체인점들은 교차로에만 위치한다.

 

물론 각 교차로마다 항상 이 레스토랑 체인점이 있는 것은 아니다. 이 레스토랑은 현금만 사용할 수 있다. ASP시에 사는 일환이는 오늘 오후에 이 레스토랑에서 가족들과 파티를 열려고 한다. 

그런데 갖고 있는 현금이 부족하여 레스토랑으로 가는 동안에 가능한 한 많은 현금을 ATM 기기로부터 인출할 계획을 세웠다.  그는 자신의 집에서 출발하여 차로 이동하면서 통과하는 모든 교차로 ATM 기기에 들어있는 현금 전부를 인출하려고 한다. 

 

차량의 최종 목적지는 뷥스 체인점 중의 한 곳이고, 이 체인점이 어떤 교차로에 위치하는지는 상관없다.

 

일환이는 ANSI 은행의 홈페이지 정보를 통해 각 ATM 기기에 현금이 얼마나 들어 있는지를 알고 있다. 이동 시 동일한 도로나 교차로를 여러 번 지날 수 있다. ATM 기기의 현금은 새로 보충되지 않기 때문에 첫 번째 이후 다시 방문하는 교차로의 ATM 기기에는 인출할 현금이 없다. 예를 들어, 아래 그림처럼 도시에 6개의 교차로가 있다고 하자. 교차로는 원으로 표시되어 있고, 화살표는 도로를 나타낸다. 

현금인출기 예제

이중 원으로 표시된 교차로에는 레스토랑이 있다. 각 ATM 기기가 갖고있는 현금의 액수는 교차로 위에 표시된 숫자이다. 

이 예에서 현금 인출을 1번 교차로부터 시작한다면, 일환이는 1-2-4-1-2-3-5의 경로를 통해서 총 47의 현금을 인출할 수 있다.

 

일환이가 출발 장소에서 어떤 레스토랑까지 이동하면서 인출할 수 있는 현금의 최대 액수가 얼마인지를 계산하는 프로그램을 작성하시오.

Input

 

입력은 여러개의 테스트 케이스로 이뤄지며, 입력의 첫째 줄에는 테스트 케이스의 개수 T가 입력된다.

 

테스트 케이스의 첫째 줄에 교차로의 수와 도로의 수를 나타내는 2개의 정수 NM이 차례로 주어진다. 

교차로는 1부터 N까지 번호로 표시된다. 그 다음 M개의 줄에는 각 줄마다 각 도로의 시작 교차로 번호와 끝 교차로 번호를 나타내는 2개의 정수가 주어진다. 

그 다음 N개의 줄에는 1번 교차로부터 차례대로 각 교차로의 ATM 기기가 보유한 현금의 액수를 나타내는 정수가 각 줄에 하나씩 주어진다.

 

그 다음 줄에는 두 개의 정수 SP가 주어진다. 여기서 S는 출발 장소(현금 인출의 시작 장소)인 교차로 번호이고 P는 레스토랑의 개수이다(1 ≤ P ≤ N). 

그 다음 줄에는 각 레스토랑이 있는 교차로의 번호를 나열한 P개의 정수가 주어진다.

 

N, M ≤ 500,000 이고, 각 ATM 기기에 들어 있는 현금의 액수는 0 이상 4,000 이하이다. 

모든 입력에서 경로의 출발 장소로부터 일방통행 도로를 통해 도달 가능한 레스토랑이 항상 하나 이상 존재한다.

Output

 

각 테스트 케이스에 대해 일환이가 출발 장소에서 어떤 레스토랑까지 이동하면서 인출할 수 있는 현금의 최대 액수를 한줄에 출력한다.

 

Sample Input

Sample Output

1
6 7
1 2
2 3
3 5
2 4
4 1
2 6
6 5
10
12
8
16
1
5
1 4
4 3 5 6
47

Source

APIO 2009