#include <bits/stdc++.h>
using namespace std;
const int P = 924844033;
int n, k, r;
int N;
vector<int> G[500006];
int g[500006][20], dep[500006];
void dfs(int u, int f) {
  dep[u] = dep[f] + 1;
  for (int v : G[u])
    if (v != f) {
      g[v][0] = u;
      for (int k = (1), kend = (19); k <= kend; ++k)
        if (g[g[v][k - 1]][k - 1])
          g[v][k] = g[g[v][k - 1]][k - 1];
        else
          break;
      dfs(v, u);
    }
}
int lca(int u, int v) {
  if (dep[u] < dep[v]) swap(u, v);
  for (int k = 19; k >= 0; --k)
    if (dep[g[u][k]] >= dep[v]) u = g[u][k];
  if (u == v) return u;
  for (int k = 19; k >= 0; --k)
    if (g[u][k] != g[v][k]) u = g[u][k], v = g[v][k];
  return g[u][0];
}
int d[500006];
int fa[500006];
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); }
void solve() {
  cin >> n >> k >> r;
  N = n;
  for (int i = (2), iend = (n); i <= iend; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    ++N;
    G[u].push_back(N), G[N].push_back(v);
    G[v].push_back(N), G[N].push_back(u);
  }
  dfs(1, 1);
  queue<int> Q;
  memset(d, 0x3f, sizeof d);
  for (int i = (1), iend = (r); i <= iend; ++i) {
    int u;
    scanf("%d", &u);
    Q.push(u);
    d[u] = 0;
  }
  for (int i = (1), iend = (N); i <= iend; ++i) fa[i] = i;
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    if (d[u] >= k) break;
    for (int v : G[u]) {
      fa[find(v)] = find(u);
      if (d[v] > 1e9) d[v] = d[u] + 1, Q.push(v);
    }
  }
  int L;
  auto dis = [&](int u, int v) { return dep[u] + dep[v] - 2 * dep[L]; };
  auto walk = [&](int u, int v, int k) {
    if (k > dep[u] - dep[L]) {
      k -= (dep[u] - dep[L]);
      k = (dep[v] - dep[L] - k);
      for (int t = 19; t >= 0; --t)
        if (k >= (1 << t)) v = g[v][t], k -= (1 << t);
      return v;
    } else {
      for (int t = 19; t >= 0; --t)
        if (k >= (1 << t)) u = g[u][t], k -= (1 << t);
      return u;
    }
  };
  int q;
  cin >> q;
  while (q--) {
    int u, v;
    scanf("%d%d", &u, &v);
    L = lca(u, v);
    if (dis(u, v) <= 2 * k)
      puts("YES");
    else if (find(walk(u, v, k)) == find(walk(v, u, k)))
      puts("YES");
    else
      puts("NO");
  }
}
signed main() { solve(); }
