#include <bits/stdc++.h>
using namespace std;
int n, m;
int A[56];
pair<int, int> E[56];
int wto[56];
int cne;
vector<pair<int, int> > G[56];
int siz[56];
void afs(int u, int f, int cf) {
  for (auto& t : G[u])
    if (t.first != f) {
      E[++cne] = make_pair(u, t.first);
      wto[cne] = t.second;
      t.second = cne;
      afs(t.first, u, cne);
      siz[u] += siz[t.first];
    } else
      t.second = cf;
}
int dp[56][2][56][56];
int wkr(int e, int w, int x, int y) {
  int& s = dp[e][w][x][y];
  if (~s) return s;
  if (!x && !y) return s = 0;
  int u = E[e].first, v = E[e].second;
  if (w) swap(u, v);
  if (G[v].size() == 1) {
    return s = wkr(e, w ^ 1, y, 0) + wto[e];
  }
  int g[56][56];
  memset(g, 0, sizeof g);
  g[0][0] = 0x3f3f3f3f;
  for (int i = 1; i <= (int)G[v].size(); ++i) {
    int tw = 0;
    pair<int, int> t = G[v][i - 1];
    memcpy(g[i], g[i - 1], sizeof g[i]);
    if (t.first == u) {
      continue;
    }
    if (v != E[t.second].first) tw = 1;
    for (int k = (1), kend = (x); k <= kend; ++k) {
      int w = wkr(t.second, tw, k, x - k + y);
      for (int f = (k), fend = (x); f <= fend; ++f)
        g[i][f] = max(g[i][f], min(g[i - 1][f - k], w));
    }
  }
  return s = g[G[v].size()][x] + wto[e];
}
int tr[56];
void solve() {
  cin >> n;
  for (int i = (2), iend = (n); i <= iend; ++i) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    G[u].emplace_back(make_pair(v, w)), G[v].emplace_back(make_pair(u, w));
  }
  memset(dp, -1, sizeof dp);
  int s;
  cin >> s;
  cin >> m;
  for (int i = (1), iend = (m); i <= iend; ++i)
    scanf("%d", tr + i), ++siz[tr[i]];
  afs(s, s, 0);
  int as = 0x3f3f3f3f;
  for (auto t : G[s]) {
    int v = t.first;
    as = min(as, wkr(t.second, 0, siz[v], m - siz[v]));
  }
  cout << as << endl;
}
signed main() { solve(); }
