#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
int N, M, s, cnt[55];
long long DP[55][55][55][55];
vector<pair<int, int> > g[55];
int DFS(int v, int p) {
  int ret = cnt[v];
  for (auto& e : g[v]) {
    if (e.first != p) {
      ret += DFS(e.first, v);
    }
  }
  return ret;
}
long long solve(int v, int u, int fc, int bc) {
  if (!fc && !bc) return 0;
  long long& ret = DP[v][u][fc][bc];
  if (~ret) return ret;
  int sz = g[u].size();
  if (sz == 1) {
    if (!bc) return 0;
    return solve(u, v, bc, 0) + g[u][0].second;
  }
  vector<long long> cost(fc + 1);
  cost[0] = INF;
  for (int i = 0; i < sz; ++i) {
    if (g[u][i].first != v) {
      for (int j = fc; j >= 1; --j) {
        for (int k = j; k >= 1; --k) {
          cost[j] = max(cost[j], min(cost[j - k],
                                     solve(u, g[u][i].first, k, fc + bc - k) +
                                         g[u][i].second));
        }
      }
    }
  }
  ret = cost[fc];
  if (0) printf("DP[%d][%d][%d][%d] = %lld\n", v, u, fc, bc, ret);
  return ret;
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N - 1; ++i) {
    int first, second, w;
    scanf("%d %d %d", &first, &second, &w);
    g[first].emplace_back(second, w);
    g[second].emplace_back(first, w);
  }
  scanf("%d %d", &s, &M);
  for (int i = 1; i <= M; ++i) {
    int first;
    scanf("%d", &first);
    ++cnt[first];
  }
  memset(DP, -1, sizeof(DP));
  long long ans = INF;
  for (auto& e : g[s]) {
    int nc = DFS(e.first, s);
    ans = min(ans, solve(s, e.first, nc, M - nc) + e.second);
  }
  printf("%lld\n", ans);
}
