#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chkmax(T &x, T y) {
  if (x < y) x = y;
}
template <class T>
inline void chkmin(T &x, T y) {
  if (x > y) x = y;
}
int n, m, s, dp[55][55], d[55][55], fi[55], se[55], deg[55], p[55], q[55],
    tt[55];
int f(int x) { return (x == p[x]) ? x : p[x] = f(p[x]); }
int main() {
  int i, j, k, l, L, R, M;
  scanf("%d", &n);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (i != j) d[i][j] = 1000000000;
  for (i = 1; i <= n; i++) p[i] = i;
  for (i = 1; i < n; i++) {
    scanf("%d %d %d", &j, &k, &l);
    fi[i] = j, se[i] = k;
    deg[j]++, deg[k]++;
    d[j][k] = d[k][j] = l;
  }
  scanf("%d %d", &s, &m);
  for (i = 1; i < n; i++)
    if (fi[i] != s && se[i] != s) p[f(fi[i])] = f(se[i]);
  for (i = 0; i < m; i++) scanf("%d", &j), q[f(j)]++;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      for (k = 1; k <= n; k++) chkmin(d[j][k], d[i][j] + d[i][k]);
  for (i = 1; i <= m; i++)
    for (j = 1; j <= n; j++)
      if (deg[j] == 1) {
        L = 0, R = 1000000000;
        while (L < R) {
          M = L + R + 1 >> 1;
          int t = 0;
          for (k = 1; k <= n; k++)
            if (deg[k] == 1) {
              for (l = 0; l < i && dp[l][k] + d[j][k] < M; l++)
                ;
              t += i - l;
            }
          if (t < i)
            R = M - 1;
          else
            L = M;
        }
        dp[i][j] = L;
      }
  L = 0, R = 1000000000;
  while (L < R) {
    M = L + R + 1 >> 1;
    int t = 0;
    memset(tt, 0, sizeof tt);
    for (k = 1; k <= n; k++)
      if (deg[k] == 1) {
        for (l = 0; l < m && dp[l][k] + d[s][k] < M; l++)
          ;
        tt[f(k)] += m - l;
      }
    for (k = 1; k <= n; k++)
      if (q[k] > tt[k]) break;
    if (k > n)
      L = M;
    else
      R = M - 1;
  }
  printf("%d\n", L);
  return 0;
}
