#include <bits/stdc++.h>
using namespace std;
template <typename type>
inline type read() {
  type x = 0, w = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') w = -w;
  for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
  return x * w;
}
template <>
inline char read<char>() {
  char x = getchar();
  while (!isalpha(x)) x = getchar();
  return x;
}
template <typename type>
inline type& read(type& x) {
  return x = read<type>();
}
template <typename type, typename... others>
inline void read(type& x, others&... y) {
  x = read<type>(), read(y...);
}
template <typename type>
inline void write(type x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar('0' + x % 10);
}
template <>
inline void write<char>(char x) {
  putchar(x);
}
template <typename type, typename... others>
inline void write(type x, others... y) {
  write(x), write(y...);
}
const int N = 60, inf = 1e9;
struct edge {
  int y, w, next;
} to[2 * N];
int head[N], tot = 1, deg[N];
inline void link(int x, int y, int w) {
  to[++tot] = {y, w, head[x]}, head[x] = tot;
  to[++tot] = {x, w, head[y]}, head[y] = tot;
  ++deg[x], ++deg[y];
}
int siz[N], f[2 * N][N][N];
void dfs(int x, int fa) {
  for (int i = head[x]; i; i = to[i].next) {
    int y = to[i].y;
    if (y == fa) continue;
    dfs(y, x), siz[x] += siz[y];
  }
}
int dp(int e, int a, int b) {
  if (!a and !b) return 0;
  if (f[e][a][b] != -1) return f[e][a][b];
  int x = to[e].y;
  if (deg[x] == 1) {
    if (b == 0) return 0;
    return f[e][a][b] = dp(e ^ 1, b, 0) + to[e].w;
  }
  int g[N] = {inf};
  for (int i = head[x]; i; i = to[i].next)
    if (i != (e ^ 1))
      for (int j = a; j >= 1; --j)
        for (int k = j; k >= 1; --k)
          g[j] = max(g[j], min(g[j - k], dp(i, k, a + b - k) + to[i].w));
  return f[e][a][b] = g[a];
}
int main() {
  int n = read<int>();
  for (int i = 1; i < n; ++i) {
    int x = read<int>(), y = read<int>(), w = read<int>();
    link(x, y, w);
  }
  int s = read<int>(), m = read<int>();
  for (int i = 1; i <= m; ++i) ++siz[read<int>()];
  dfs(s, 0);
  memset(f, -1, sizeof f);
  int ans = inf;
  for (int i = head[s]; i; i = to[i].next) {
    int x = to[i].y;
    ans = min(ans, dp(i, siz[x], m - siz[x]) + to[i].w);
  }
  write(ans, '\n');
  return 0;
}
