#include <bits/stdc++.h>
long long gi() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f ? x : -x;
}
int fir[400010], dis[800010], nxt[800010], id;
void link(int a, int b) {
  nxt[++id] = fir[a], fir[a] = id, dis[id] = b;
  nxt[++id] = fir[b], fir[b] = id, dis[id] = a;
}
int st[19][400010], dep[400010];
void dfs(int x) {
  for (int i = fir[x]; i; i = nxt[i]) {
    if (st[0][x] == dis[i]) continue;
    dep[dis[i]] = dep[x] + 1;
    st[0][dis[i]] = x;
    dfs(dis[i]);
  }
}
int LCA(int a, int b) {
  if (dep[a] < dep[b]) std::swap(a, b);
  int c = dep[a] - dep[b];
  for (int i = 0; i < 19; ++i)
    if (c >> i & 1) a = st[i][a];
  for (int i = 18; ~i; --i)
    if (st[i][a] ^ st[i][b]) a = st[i][a], b = st[i][b];
  if (a != b) a = st[0][a];
  return a;
}
int jump(int x, int d) {
  for (int i = 18; ~i; --i)
    if (d >> i & 1) x = st[i][x];
  return x;
}
int jumpath(int x, int y, int z, int d) {
  if (d <= dep[x] - dep[z]) return jump(x, d);
  return jump(y, dep[y] - dep[z] - (d - dep[x] + dep[z]));
}
int FA[400010];
int HD(int x) { return FA[x] == x ? x : FA[x] = HD(FA[x]); }
int que[400010], hd, tl, from[400010], di[400010];
int32_t main() {
  int n = gi(), k = gi() * 2, r = gi(), x, y;
  for (int i = 1; i < n; ++i)
    x = gi(), y = gi(), link(x, i + n), link(y, i + n);
  dfs(1);
  for (int i = 1; i < 19; ++i)
    for (int j = 1; j <= n; ++j) st[i][j] = st[i - 1][st[i - 1][j]];
  for (int i = 1; i <= n; ++i) FA[i] = i;
  for (int i = 1; i <= r; ++i) x = gi(), from[x] = x, que[tl++] = x;
  while (hd ^ tl) {
    int x = que[hd++];
    for (int i = fir[x]; i; i = nxt[i])
      if (!from[dis[i]])
        from[dis[i]] = from[x], di[dis[i]] = di[x] + 1, que[tl++] = dis[i];
      else if (di[x] + di[dis[i]] <= k)
        FA[HD(from[x])] = HD(from[dis[i]]);
  }
  int q = gi();
  while (q--) {
    x = gi(), y = gi();
    int z = LCA(x, y), dist = dep[x] + dep[y] - dep[z] * 2, flg = dist <= k;
    if (dist > k) {
      int a = jumpath(x, y, z, k >> 1), b = jumpath(y, x, z, k >> 1);
      if (di[a] <= (k >> 1) && di[b] <= (k >> 1) && HD(from[a]) == HD(from[b]))
        flg = 1;
    }
    if (flg)
      std::cout << "YES\n";
    else
      std::cout << "NO\n";
  }
  return 0;
}
