#include <bits/stdc++.h>
using namespace std;
const int N = 4e5 + 1;
struct node {
  int to, nxt;
} e[N << 1];
int head[N], cnt, n, k, r, m, p;
int f[N], dep[N], fa[N][22], dis[N];
queue<int> q;
void add(int u, int v) {
  e[++cnt] = (node){v, head[u]};
  head[u] = cnt;
  e[++cnt] = (node){u, head[v]};
  head[v] = cnt;
}
int getf(int x) {
  if (x == f[x]) return x;
  return f[x] = getf(f[x]);
}
void merge(int x, int y) {
  int fx = getf(x), fy = getf(y);
  f[fy] = fx;
}
void ch(int u) {
  for (int i = 1; (1 << i) < dep[u]; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v != fa[u][0]) fa[v][0] = u, dep[v] = dep[u] + 1, ch(v);
  }
}
int find(int x, int y) {
  for (int i = 18; i >= 0; i--) {
    if ((1 << i) <= y) {
      y -= 1 << i;
      x = fa[x][i];
    }
  }
  return x;
}
void lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  int xt = x, yt = y, sum = 0, sun = 0;
  for (int i = 18; i >= 0; i--) {
    if (dep[fa[x][i]] >= dep[y]) sum += 1 << i, x = fa[x][i];
    if (x == y) break;
  }
  for (int i = 18; i >= 0; i--)
    if (fa[x][i] != fa[y][i])
      sum += 1 << (i + 1), sun += 1 << i, x = fa[x][i], y = fa[y][i];
  if (x != y) sum += 2, sun += 1, x = fa[x][0], y = fa[y][0];
  if (sum <= k * 2)
    printf("YES\n");
  else {
    x = find(xt, k);
    y = sun >= k ? find(yt, k) : find(xt, sum - k);
    getf(x) == getf(y) ? printf("YES\n") : printf("NO\n");
  }
}
int main() {
  memset(dis, -1, sizeof dis);
  cin >> n >> k >> r;
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d%d", &u, &v);
    add(u, i + n);
    add(i + n, v);
  }
  m = n * 2 - 1;
  for (int i = 1; i <= m; i++) f[i] = i;
  for (int i = 1, s; i <= r; i++) {
    scanf("%d", &s);
    dis[s] = 0;
    q.push(s);
  }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = head[u]; i; i = e[i].nxt) {
      int v = e[i].to;
      if (dis[v] != -1) {
        merge(u, v);
        continue;
      }
      if (dis[u] >= k) continue;
      dis[v] = dis[u] + 1;
      merge(u, v);
      q.push(v);
    }
  }
  dep[1] = 1;
  ch(1);
  cin >> p;
  for (int i = 1; i <= p; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    lca(x, y);
  }
}
