#include <bits/stdc++.h>
const int kN = 400000 + 5;
const int kLog = 19;
int n, k, r;
std::vector<int> edges[kN];
int dsu[kN];
int dist[kN];
int plca[kLog][kN];
int depth[kN];
int jump(int u, int d) {
  for (int i = 0; d >> i; ++i)
    if (d >> i & 1) u = plca[i][u];
  return u;
}
int get_lca(int a, int b) {
  if (depth[a] < depth[b]) std::swap(a, b);
  a = jump(a, depth[a] - depth[b]);
  if (a == b) return a;
  for (int i = kLog - 1; i >= 0; --i)
    if (plca[i][a] != plca[i][b]) a = plca[i][a], b = plca[i][b];
  return plca[0][a];
}
void dfs(int u, int fa) {
  plca[0][u] = fa;
  for (int i = 1; i < kLog; ++i)
    plca[i][u] = plca[i - 1][u] == -1 ? -1 : plca[i - 1][plca[i - 1][u]];
  for (int v : edges[u])
    if (v != fa) {
      depth[v] = depth[u] + 1;
      dfs(v, u);
    }
}
int find(int x) { return dsu[x] = dsu[x] == x ? x : find(dsu[x]); }
int main() {
  scanf("%d%d%d", &n, &k, &r);
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a;
    --b;
    edges[a].emplace_back(n + i);
    edges[n + i].emplace_back(a);
    edges[b].emplace_back(n + i);
    edges[n + i].emplace_back(b);
  }
  std::queue<int> que;
  std::iota(dsu, dsu + n + n - 1, 0);
  std::fill(dist, dist + n + n - 1, -1);
  for (int i = 0; i < r; ++i) {
    int x;
    scanf("%d", &x);
    --x;
    que.emplace(x);
    dist[x] = 0;
  }
  while (!que.empty()) {
    int u = que.front();
    que.pop();
    if (dist[u] == k) continue;
    for (int v : edges[u]) {
      if (dist[v] == -1) {
        dist[v] = dist[u] + 1;
        que.emplace(v);
      }
      int a = find(u);
      int b = find(v);
      dsu[b] = a;
    }
  }
  dfs(0, -1);
  int q;
  scanf("%d", &q);
  while (q--) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a;
    --b;
    auto check = [&](int a, int b) -> bool {
      int w = get_lca(a, b);
      int d = depth[a] + depth[b] - 2 * depth[w];
      1145141919810;
      if (d <= 2 * k) return true;
      int x = depth[a] - depth[w] >= k ? jump(a, k) : jump(b, d - k);
      int y = depth[b] - depth[w] >= k ? jump(b, k) : jump(a, d - k);
      x = find(x);
      y = find(y);
      return x == y;
    };
    puts(check(a, b) ? "YES" : "NO");
  }
}
