#include <bits/stdc++.h>
using namespace std;
const int N = 55, Inf = 1e9;
int n, s, m, ev[N * 2], ew[N * 2], cnt[N], deg[N];
vector<int> G[N];
int f[N][N * 2][N];
int dp(int, int, int);
struct node {
  int i, k, e, c;
  int val() const { return dp(i, e, c); }
  int key() const { return c < k ? dp(i, e, c + 1) : 0; }
  bool operator<(const node& b) const { return key() < b.key(); }
};
int dp(int i, int j, int k) {
  if (!k) return Inf;
  if (deg[ev[j]] == 1) return k < i ? dp(i - k, j ^ 1, i - k) + ew[j] : ew[j];
  int& res = f[i][j][k];
  if (res) return res;
  priority_queue<node> q;
  for (int e : G[ev[j]])
    if (e ^ j ^ 1) q.push({i, k, e, 0});
  for (int s = (1); s <= (k); s++) {
    node x = q.top();
    q.pop(), x.c++, q.push(x);
  }
  res = Inf;
  while (!q.empty()) res = min(res, q.top().val() + ew[j]), q.pop();
  return res;
}
int dfs(int u, int fa) {
  int res = cnt[u];
  for (int e : G[u])
    if (ev[e] ^ fa) res += dfs(ev[e], u);
  return res;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n;
  int u, v, w;
  for (int i = (2); i <= (n); i++) {
    int a = i * 2, b = a + 1;
    cin >> u >> v >> w, deg[ev[a] = v]++, deg[ev[b] = u]++, ew[a] = ew[b] = w;
    G[u].push_back(a), G[v].push_back(b);
  }
  cin >> s >> m;
  for (int i = (1); i <= (m); i++) cin >> u, cnt[u]++;
  int ans = 1e9;
  for (int e : G[s]) ans = min(ans, dp(m, e, dfs(ev[e], s)));
  cout << ans;
  return 0;
}
