#include <bits/stdc++.h>
using namespace std;
const int maxN = 400005;
const int inf = 1 << 29;
int N, K, R, V;
vector<int> G[maxN];
int dist[maxN];
int par[maxN], rnk[maxN];
int findpar(int x) {
  if (par[x] != x) par[x] = findpar(par[x]);
  return par[x];
}
void merge(int x, int y) {
  int px = findpar(x), py = findpar(y);
  if (px == py) return;
  if (rnk[px] < rnk[py]) swap(px, py);
  par[py] = px;
  if (rnk[px] == rnk[py]) rnk[px]++;
}
int depth[maxN], tpar[maxN][20];
void dfs(int cur, int pre) {
  tpar[cur][0] = pre;
  for (int i = 1; i < 20; i++) tpar[cur][i] = tpar[tpar[cur][i - 1]][i - 1];
  for (int i = 0; i < G[cur].size(); i++) {
    int nxt = G[cur][i];
    if (nxt != pre) {
      depth[nxt] = depth[cur] + 1;
      dfs(nxt, cur);
    }
  }
}
int lca(int x, int y) {
  if (depth[x] > depth[y]) swap(x, y);
  for (int i = 19; i >= 0; i--) {
    if (depth[tpar[y][i]] >= depth[x]) y = tpar[y][i];
  }
  for (int i = 19; i >= 0; i--) {
    if (tpar[x][i] != tpar[y][i]) {
      x = tpar[x][i];
      y = tpar[y][i];
    }
  }
  return (x == y) ? x : tpar[x][0];
}
int la(int x, int len) {
  int px = x;
  for (int i = 19; i >= 0; i--) {
    if (depth[x] - depth[tpar[px][i]] <= len) px = tpar[px][i];
  }
  return px;
}
int walk(int x, int y, int l) {
  if (depth[x] - depth[l] >= K) return la(x, K);
  return la(y, depth[x] + depth[y] - 2 * depth[l] - K);
}
int main() {
  scanf("%d %d %d", &N, &K, &R);
  int a, b, M = N;
  for (int i = 1; i < M; i++) {
    scanf("%d %d", &a, &b);
    N++;
    G[a].push_back(N);
    G[b].push_back(N);
    G[N].push_back(a);
    G[N].push_back(b);
  }
  for (int i = 1; i <= N; i++) dist[i] = inf;
  queue<int> Q;
  for (int i = 0; i < R; i++) {
    scanf("%d", &a);
    dist[a] = 0;
    Q.push(a);
  }
  for (int i = 1; i <= N; i++) par[i] = i;
  while (!Q.empty()) {
    int cur = Q.front();
    Q.pop();
    for (int i = 0; i < G[cur].size(); i++) {
      int nxt = G[cur][i];
      merge(cur, nxt);
      if (dist[nxt] > dist[cur] + 1) {
        dist[nxt] = dist[cur] + 1;
        if (dist[nxt] < K) Q.push(nxt);
      }
    }
  }
  dfs(1, 1);
  scanf("%d", &V);
  while (V--) {
    scanf("%d %d", &a, &b);
    int l = lca(a, b);
    if (depth[a] + depth[b] - 2 * depth[l] <= 2 * K)
      puts("YES");
    else {
      int ka = walk(a, b, l), kb = walk(b, a, l);
      puts(findpar(ka) == findpar(kb) ? "YES" : "NO");
    }
  }
  return 0;
}
