#include <bits/stdc++.h>
using namespace std;
int n, S, m, sz[55], deg[55];
int dp[120][55][55];
using pii = pair<int, int>;
using iii = pair<int, pii>;
vector<iii> adj[55];
vector<iii> edg;
void dfs(int v, int p) {
  for (iii x : adj[v]) {
    if (x.second.second != p) {
      dfs(x.second.second, v);
      sz[v] += sz[x.second.second];
    }
  }
}
int rec(int e, int in, int ot) {
  if (in == 0 && ot == 0) return 0;
  if (dp[e][in][ot] >= 0) return dp[e][in][ot];
  int v = edg[e].second.second;
  if (deg[v] == 1) {
    if (ot == 0)
      return 0;
    else
      return dp[e][in][ot] = rec((e ^ 1), ot, 0) + edg[e].first;
  }
  vector<int> g(100);
  g[0] = 1e9 + 7;
  for (iii x : adj[v]) {
    if (x.first == (e ^ 1)) {
      continue;
    }
    for (int k = in; k > 0; k--) {
      for (int diff = k; diff > 0; diff--) {
        g[k] = max(g[k], min(g[k - diff], rec(x.first, diff, in + ot - diff) +
                                              x.second.first));
      }
    }
  }
  return dp[e][in][ot] = g[in];
}
int main() {
  memset(dp, -1, sizeof dp);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b, w;
    cin >> a >> b >> w;
    --a;
    --b;
    deg[a]++;
    deg[b]++;
    adj[a].push_back(make_pair(2 * i, make_pair(w, b)));
    adj[b].push_back(make_pair(2 * i + 1, make_pair(w, a)));
    edg.push_back(make_pair(w, make_pair(a, b)));
    edg.push_back(make_pair(w, make_pair(b, a)));
  }
  cin >> S >> m;
  --S;
  for (int i = 0; i < m; i++) {
    int x;
    cin >> x;
    --x;
    sz[x]++;
  }
  dfs(S, -1);
  int ans = INT_MAX;
  for (iii x : adj[S]) {
    ans = min(ans, rec(x.first, sz[x.second.second], m - sz[x.second.second]) +
                       x.second.first);
  }
  cout << ans << endl;
}
