#include <bits/stdc++.h>
using namespace std;
const int N = 52;
struct node {
  int v, w, nxt;
} e[N << 1];
int s, n, m, first[N], cnt = 1, siz[N], de[N];
inline void add(int u, int v, int w) {
  e[++cnt].v = v;
  e[cnt].w = w;
  e[cnt].nxt = first[u];
  first[u] = cnt;
  ++de[u];
}
inline void dfs(int u, int f) {
  for (int i = first[u]; i; i = e[i].nxt) {
    int v = e[i].v;
    if (v == f) continue;
    dfs(v, u);
    siz[u] += siz[v];
  }
}
int dp[N << 1][N][N];
inline int solve(int i, int x, int y) {
  if (x + y == 0) return 0;
  int v = e[i].v;
  int &f = dp[i][x][y];
  if (f != -1) return f;
  if (de[v] == 1) {
    if (y == 0)
      return 0;
    else {
      f = solve(i ^ 1, y, 0) + e[i].w;
      return f;
    }
  }
  int g[N];
  memset(g, 0, sizeof(g));
  g[0] = 0x3f3f3f3f;
  for (int j = first[v]; j; j = e[j].nxt) {
    if (j == (i ^ 1)) continue;
    for (int k = x; k >= 1; --k)
      for (int w = k; w; --w)
        g[k] = max(g[k], min(g[k - w], e[j].w + solve(j, w, x + y - w)));
  }
  return f = g[x];
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d", &n);
  for (int i = 1, u, v, w; i < n; ++i) {
    scanf("%d%d%d", &u, &v, &w);
    add(u, v, w);
    add(v, u, w);
  }
  scanf("%d%d", &s, &m);
  for (int i = 1, x; i <= m; ++i) {
    scanf("%d", &x);
    siz[x]++;
  }
  dfs(s, 0);
  int ans = 0x3f3f3f3f;
  for (int i = first[s]; i; i = e[i].nxt) {
    int v = e[i].v;
    ans = min(ans, solve(i, siz[v], m - siz[v]) + e[i].w);
  }
  cout << ans << endl;
  return 0;
}
