import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;

/*
1
4 6 2
1 2 10
2 3 15
1 4 35
3 4 5
1 3 50
3 2 50
3
4

 */
public class routes {
  
  static ArrayList<Edge>[] adj;
  static int n, oo = (int)1E9;
  public static void main(String[] args) throws Exception {
    Scanner in = new Scanner(System.in);
    PrintWriter out = new PrintWriter(System.out);
    
//    Scanner in = new Scanner(new File("routes.in"));
//    PrintWriter out = new PrintWriter(new File("routes.out"));
    
    int t = in.nextInt();
    while(t --> 0) {
      n = in.nextInt();
      int m = in.nextInt();
      int q = in.nextInt();
      
      adj = new ArrayList[n];
      for(int i = 0; i < n; ++i) {
        adj[i] = new ArrayList<Edge>();
      }
      
      for(int i = 0; i < m; ++i) {
        int v1 = in.nextInt()-1;
        int v2 = in.nextInt()-1;
        int cost = in.nextInt();
        adj[v1].add(new Edge(v2, cost));
        adj[v2].add(new Edge(v1, cost));
      }
      
      int[] costs = dijkstras(0);
      for(int i = 0; i < q; ++i) {
        int v = in.nextInt()-1;
        out.println(costs[v]);
      }
    }
    
    out.close();
    in.close();
  }
  
  static int[] dijkstras(int start) {
    int[] costs = new int[n];
    Arrays.fill(costs, oo);
    costs[start] = 0;
    
    PriorityQueue<Edge> q = new PriorityQueue<Edge>();
    q.add(new Edge(start, 0));
    
    while(!q.isEmpty()) {
      Edge e = q.poll();
      
      if(costs[e.v] < e.cost) {
        continue;
      }
      
      for(Edge next : adj[e.v]) {
        int alt = costs[e.v] + next.cost;
        if(costs[next.v] > alt) {
          costs[next.v] = alt;
          q.add(new Edge(next.v, alt));
        }
      }
    }
    return costs;
  }
  
  static class Edge implements Comparable<Edge> {
    int v;
    int cost;
    Edge(int V, int c) {
      v = V;
      cost = c;
    }
    
    public int compareTo(Edge e) {
      return cost - e.cost;
    }
  }
}
