#include <bits/stdc++.h>
using namespace std;
struct edge {
  int next, to, w;
} e[101];
int cnt = 1, head[51], size[51], dp[51][51][51][51], n, s, m;
void add(int u, int v, int w) {
  e[++cnt].next = head[u];
  e[cnt].to = v;
  e[cnt].w = w;
  head[u] = cnt;
}
void dfs0(int u, int fa) {
  for (int i = head[u]; i; i = e[i].next) {
    if (e[i].to != fa) {
      dfs0(e[i].to, u);
      size[u] += size[e[i].to];
    }
  }
}
int dfs(int u, int v, int cnt, int tot, int w) {
  if (!tot) return 0;
  if (!cnt) return 0x3f3f3f3f;
  int &F = dp[u][v][cnt][tot];
  int i, j, k, ts = 0;
  if (F != 0x3f3f3f3f) return F;
  if (e[head[u]].to == v && !e[head[u]].next)
    return F = w + dfs(v, u, tot - cnt, tot - cnt, w);
  for (int i = head[u]; i; i = e[i].next)
    if (e[i].to != v) {
      for (int j = 0; j <= cnt; j++) dfs(e[i].to, u, j, tot, e[i].w);
      ts++;
    }
  int g[55][55];
  for (int i = 0; i <= ts; i++) {
    for (int j = 0; j <= tot; j++) g[i][j] = 0;
  }
  ts = 0;
  g[0][0] = 0x3f3f3f3f;
  for (int i = head[u]; i; i = e[i].next)
    if (e[i].to != v) {
      ++ts;
      for (int j = 0; j <= tot; j++)
        for (int k = 0; k <= tot - j; k++)
          g[ts][j + k] = max(
              g[ts][j + k], min(g[ts - 1][j], dfs(e[i].to, u, k, tot, e[i].w)));
    }
  return F = g[ts][cnt] + w;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    add(u, v, w);
    add(v, u, w);
  }
  scanf("%d", &s);
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int x;
    scanf("%d", &x);
    size[x]++;
  }
  dfs0(s, 0);
  memset(dp, 0x3f, sizeof(dp));
  int ans = 0x3f3f3f3f;
  for (int i = head[s]; i; i = e[i].next) {
    ans = min(ans, dfs(e[i].to, s, size[e[i].to], m, e[i].w));
  }
  printf("%d\n", ans);
}
