#include <bits/stdc++.h>
using namespace std;
int get() {
  char ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-')
    ;
  if (ch == '-') {
    int s = 0;
    while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
    return -s;
  }
  int s = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
  return s;
}
const int N = 55;
const int INF = 1e9;
int f[N][N];
struct edge {
  int x, l, nxt;
} e[N * 2];
int h[N], tot;
int n;
int st;
int m;
int cri[N];
int dis[N][N];
void inse(int x, int y, int l) {
  e[++tot].x = y;
  e[tot].l = l;
  e[tot].nxt = h[x];
  h[x] = tot;
}
int d[N];
int g[N];
int be[N];
void dfs(int x, int v) {
  be[x] = v;
  for (int p = h[x]; p; p = e[p].nxt)
    if (!be[e[p].x]) dfs(e[p].x, v);
}
int cnt[N];
int main() {
  n = get();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i != j) dis[i][j] = 1e9;
  for (int i = 2; i <= n; i++) {
    int x = get(), y = get(), l = get();
    inse(x, y, l);
    inse(y, x, l);
    dis[x][y] = dis[y][x] = l;
    d[x]++, d[y]++;
  }
  st = get();
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
  m = get();
  for (int i = 1; i <= m; i++) cnt[cri[i] = get()]++;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) f[i][j] = 1e9;
  for (int c = 1; c <= m; c++)
    for (int x = 1; x <= n; x++)
      if (d[x] == 1) {
        for (int u = 1; u <= m; u++) g[u] = -1e9;
        g[0] = INF;
        for (int y = 1; y <= n; y++)
          if (d[y] == 1 && y != x) {
            for (int u = m; u >= 1; u--)
              for (int d = 1; d <= min(u, c); d++)
                if (g[u - d] != -INF)
                  g[u] = max(g[u], min(g[u - d], f[y][c - d] + dis[x][y]));
          }
        f[x][c] = g[c];
      }
  be[st] = st;
  for (int p = h[st]; p; p = e[p].nxt) dfs(e[p].x, e[p].x);
  int ans = INF;
  for (int p = h[st]; p; p = e[p].nxt) {
    int now = e[p].x, ct = 0;
    for (int x = 1; x <= n; x++)
      if (be[x] == now) ct += cnt[x];
    for (int u = 1; u <= m; u++) g[u] = -INF;
    g[0] = INF;
    for (int x = 1; x <= n; x++)
      if (be[x] == now && d[x] == 1) {
        for (int u = m; u >= 1; u--)
          for (int d = 1; d <= u; d++)
            if (g[u - d] != -INF)
              g[u] = max(g[u], min(g[u - d], f[x][m - d] + dis[st][x]));
      }
    ans = min(ans, g[ct]);
  }
  cout << ans << endl;
  return 0;
}
