火山哥周游世界
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在赌场打了一晚德扑的火山哥靠着把把All in的精湛技巧赚的盆满钵满,所以他决定拿这笔钱来周游世界。
世界上一共有 个国家,标号从 。他们由 条边连接着,经过每条边都有一定的时间花费。任意两个国家之间两两可达。
火山哥一共决定去K个国家。现在他想要知道:如果他从第 个国家出发,经过这 个国家的最短时间是多少?(请注意他可以在任意一个国家停下)

输入描述:

第一行两个整数 ,题意如题面所述。
接下来 行,每行三个整数 ,表示存在一条从 长度为 的边。
接下来 行,每行一个整数,表示火山哥想去的某个国家,保证这 个国家两两不同。
.

输出描述:

输出一共  行,其中第  行一个整数表示从  号点出发所需的最少时间。
示例1

输入

复制
3 3
1 2 1
2 3 4
1
2
3

输出

复制
5
6
5
示例2

输入

复制
5 2
1 3 1
2 3 2
4 3 3
5 1 4
5
1

输出

复制
4
7
5
8
4
示例3

输入

复制
8 1
1 2 8
1 8 7
6 4 4
7 3 5
8 3 10
1 4 7
5 7 9
7

输出

复制
22
30
5
29
9
33
0
15

说明

此样例为网友提供的hack数据,之前的提交已进行rejudge。