#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
using namespace std;
#define int long long int
const int N = 3e5 + 10;
const int md = 1e9 + 7;
const int INF = 1e18;
int32_t main(int32_t argc, char *argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  
  int T = 1;
  // cin >> T;
  while (T--) {
    int n, m;
    cin >> n >> m;
    vector<vector<pair<int, int>>> g(n + 1, vector<pair<int, int>> ());
    for (int i = 0; i < m; i++) {
      int u, v, w;
      cin >> u >> v >> w;
      g[u].push_back(make_pair(v, w));
      g[v].push_back(make_pair(u, w));
    }
    int k;
    cin >> k;
    vector<int> dist(n + 1, INF);
    set<pair<int, int>> q;
    for (int i = 0; i < k; i++) {
      int u;
      cin >> u;
      dist[u] = 0;
      q.insert({0, u});
    }
    vector<bool> visited(n + 1);
    while (!q.empty()) {
      int v = (*q.begin()).second;
      q.erase(q.begin());
      if (!visited[v])
        for (auto i : g[v]) {
          dist[i.first] = min(dist[i.first], dist[v] + i.second);
          if (!visited[i.first])
            q.insert({dist[i.first], i.first});
        }
      visited[v] = 1;
    }
    // for (int i = 1; i <= n; i++)
    //   cout << i << " " << dist[i] << '\n';
    int qu;
    cin >> qu;
    while (qu--) {
      int st, fn;
      cin >> st >> fn;
      set<pair<int, int>> q;
      q.insert({-dist[st], st});
      map<int, bool> vs;
      int ans = 0;
      while (!q.empty()) {
        int v = (*q.begin()).second;
        int ds = (*q.begin()).first;
        if (fn == v) {
          ans = max(ans, abs(ds));
          break;
        }
        q.erase(q.begin());
        if (!vs[v])
          for (auto i : g[v]) {
            if (!vs[i.first])
              q.insert({max(ds, -dist[i.first]), i.first});
          }
        vs[v] = 1;
      }
      cout << ans << '\n';
    }
  }
  return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |