#include <bits/stdc++.h>
using std::max;
using std::min;
const int N = 55;
int last[N], to[N << 1], Next[N << 1], a[N], n, m, x, y, s, size[N], f[N],
    w[N << 1], edge, ans, d[N], dp[N][N][N][N], z;
void add(int x, int y, int z) {
  to[++edge] = y;
  Next[edge] = last[x];
  last[x] = edge;
  w[edge] = z;
}
void dfs(int x, int fa) {
  f[x] = fa;
  size[x] += a[x];
  for (int i = last[x]; i; i = Next[i])
    if (to[i] != fa) {
      dfs(to[i], x);
      size[x] += size[to[i]];
    }
}
int DP(int y, int x, int xs, int ys) {
  if ((xs == 0 || d[x] == 1) && ys == 0) return 0;
  int &p = dp[x][y][xs][ys];
  if (p) return p;
  if (d[x] == 1) return p = w[last[x]] + DP(x, y, ys, 0);
  int g[xs + 5];
  for (int i = 1; i <= xs; i++) g[i] = -100000000;
  g[0] = 1000000000;
  for (int i = last[x]; i; i = Next[i])
    if (to[i] != y) {
      for (int j = xs; j; j--)
        for (int k = 1; k <= j; k++)
          g[j] = max(g[j], min(g[j - k], w[i] + DP(x, to[i], k, xs + ys - k)));
    }
  p = g[xs];
  return p;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d%d%d", &x, &y, &z);
    add(x, y, z);
    add(y, x, z);
    d[x]++, d[y]++;
  }
  scanf("%d", &s);
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &x), a[x]++;
  dfs(1, 0);
  ans = 1000000000;
  for (int i = last[s]; i; i = Next[i])
    if (to[i] != f[s])
      ans = min(ans, DP(s, to[i], size[to[i]], m - size[to[i]]) + w[i]);
    else
      ans = min(ans, DP(s, to[i], m - size[s], size[s]) + w[i]);
  printf("%d", ans);
}
