#include <bits/stdc++.h>
using namespace std;
int tot, ver[55 * 3], edge[55 * 3], Next[55 * 3], head[55];
bool vis[55][55][55][55];
int f[55][55][55][55];
int size[55];
int n, m, S, ans = 2100000000;
void add(int x, int y, int z) {
  tot++;
  ver[tot] = y;
  edge[tot] = z;
  Next[tot] = head[x];
  head[x] = tot;
}
void dfs(int x, int father) {
  for (int i = head[x]; i; i = Next[i]) {
    int y = ver[i];
    if (y == father) continue;
    dfs(y, x);
    size[x] += size[y];
  }
}
int dp(int u, int v, int x, int y) {
  if (!x && !y) return 0;
  if (vis[u][v][x][y]) return f[u][v][x][y];
  vis[u][v][x][y] = true;
  int g[55];
  memset(g, 0, sizeof(g));
  g[0] = 2100000000;
  bool flag = false;
  for (int i = head[v]; i; i = Next[i]) {
    int yy = ver[i];
    int zz = edge[i];
    if (yy == u) continue;
    flag = true;
    for (int j = x; j >= 1; j--) {
      for (int k = j; k >= 1; k--) {
        g[j] = max(g[j], min(g[j - k], dp(v, yy, k, x + y - k) + zz));
      }
    }
  }
  if (!flag) {
    if (!y) return 0;
    vis[u][v][x][y] = true;
    f[u][v][x][y] = dp(v, u, y, 0) + edge[head[v]];
    return f[u][v][x][y];
  }
  f[u][v][x][y] = g[x];
  return f[u][v][x][y];
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int x, y, z;
    scanf("%d %d %d", &x, &y, &z);
    add(x, y, z);
    add(y, x, z);
  }
  scanf("%d %d", &S, &m);
  for (int i = 1; i <= m; i++) {
    int x;
    scanf("%d", &x);
    size[x]++;
  }
  dfs(S, 0);
  for (int i = head[S]; i; i = Next[i]) {
    int y = ver[i];
    int z = edge[i];
    ans = min(ans, dp(S, y, size[y], m - size[y]) + z);
  }
  printf("%d\n", ans);
  return 0;
}
