#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, dp[55][55], dis[55][55], fa[55], s, mi, cnt[55], bel[55];
vector<int> bi[55];
vector<int> l;
void dfs(int x, int p) {
  fa[x] = p;
  for (__typeof((bi[x]).begin()) it = (bi[x]).begin(); it != (bi[x]).end();
       it++)
    if (*it != p) {
      dfs(*it, x);
    }
}
int solve(int x, int y);
bool check(int x, int y, int mid) {
  int i, s = 0;
  for ((i) = 0; (i) < (l.size()); ++(i)) {
    int t = 1;
    while (t <= y && solve(l[i], y - t) + dis[l[i]][x] >= mid) {
      t++;
      s++;
    }
    if (s >= y) return 1;
  }
  return s >= y;
}
int solve(int x, int y) {
  if (!y) return 0;
  if (dp[x][y] != -1) return dp[x][y];
  int l = 1, r = 200000, mid, ans = 0;
  while (l < r) {
    mid = (l + r) / 2;
    if (check(x, y, mid)) {
      l = mid + 1;
      ans = mid;
    } else
      r = mid;
  }
  return dp[x][y] = ans;
}
bool check2(int x, int y, int mid, int fr) {
  int i, s = 0;
  for ((i) = 0; (i) < (l.size()); ++(i))
    if (bel[l[i]] == fr) {
      int t = 1;
      while (t <= y && solve(l[i], m - t) + dis[l[i]][x] >= mid) {
        t++;
        s++;
      }
      if (s >= y) return 1;
    }
  return s >= y;
}
int main() {
  scanf("%d", &n);
  memset(dis, 0x18, sizeof(dis));
  for ((i) = 1; (i) <= (n); ++(i)) dis[i][i] = 0;
  for ((i) = 1; (i) <= (n - 1); ++(i)) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    bi[x].push_back(y);
    bi[y].push_back(x);
    dis[x][y] = dis[y][x] = z;
  }
  for ((i) = 1; (i) <= (n); ++(i))
    if (bi[i].size() == 1) l.push_back(i);
  for ((k) = 1; (k) <= (n); ++(k))
    for ((i) = 1; (i) <= (n); ++(i))
      for ((j) = 1; (j) <= (n); ++(j)) {
        dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
      }
  memset(dp, -1, sizeof(dp));
  scanf("%d", &s);
  dfs(s, 0);
  for (__typeof((l).begin()) it = (l).begin(); it != (l).end(); it++)
    if (*it != s) {
      int x = *it;
      while (fa[x] != s) x = fa[x];
      bel[*it] = x;
    }
  scanf("%d", &m);
  for ((i) = 1; (i) <= (m); ++(i)) {
    int x;
    scanf("%d", &x);
    while (fa[x] != s) x = fa[x];
    cnt[x]++;
  }
  mi = 0x18181818;
  for (__typeof((bi[s]).begin()) it = (bi[s]).begin(); it != (bi[s]).end();
       it++) {
    int l = 1, r = 200000, mid, ans = 0;
    while (l < r) {
      mid = (l + r) / 2;
      if (check2(s, cnt[*it], mid, *it)) {
        l = mid + 1;
        ans = mid;
      } else
        r = mid;
    }
    mi = min(ans, mi);
  }
  printf("%d\n", mi);
  return 0;
}
