#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
const int maxn = 4e5 + 100;
const int mod = 1e9 + 7;
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
int n, k, r, q, nex, par[maxn];
vector<int> adj[maxn];
int root(int v) { return v == par[v] ? v : par[v] = root(par[v]); }
void unite(int a, int b) {
  a = root(a), b = root(b);
  if (a == b) {
    return;
  }
  par[b] = a;
}
int dep[maxn], anc[maxn][19];
void dfs(int v) {
  dep[v] = dep[anc[v][0]] + 1;
  for (int i = 1; i < 19; i++) {
    anc[v][i] = anc[anc[v][i - 1]][i - 1];
  }
  for (int to : adj[v]) {
    if (to != anc[v][0]) {
      anc[to][0] = v;
      dfs(to);
    }
  }
}
int lca(int a, int b) {
  if (dep[a] > dep[b]) {
    swap(a, b);
  }
  for (int i = 18; i >= 0; i--) {
    if (dep[anc[b][i]] >= dep[a]) {
      b = anc[b][i];
    }
  }
  if (a == b) {
    return a;
  }
  for (int i = 18; i >= 0; i--) {
    if (anc[a][i] != anc[b][i]) {
      a = anc[a][i], b = anc[b][i];
    }
  }
  return anc[a][0];
}
int get(int a, int d) {
  for (int i = 0; i < 19; i++) {
    if (d >> i & 1) {
      a = anc[a][i];
    }
  }
  return a;
}
bool can(int a, int b) {
  int lca_ = lca(a, b);
  if (dep[a] + dep[b] - 2 * dep[lca_] <= 2 * k) {
    return true;
  }
  int aa, bb;
  if (dep[a] - dep[lca_] < k) {
    aa = get(b, dep[b] - dep[lca_] - (k - (dep[a] - dep[lca_])));
    bb = get(b, k);
  } else if (dep[b] - dep[lca_] < k) {
    aa = get(a, k);
    bb = get(a, dep[a] - dep[lca_] - (k - (dep[b] - dep[lca_])));
  } else {
    aa = get(a, k);
    bb = get(b, k);
  }
  return root(aa) == root(bb);
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0);
  cin >> n >> k >> r;
  nex = n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    ++nex;
    adj[a].push_back(nex);
    adj[nex].push_back(a);
    adj[b].push_back(nex);
    adj[nex].push_back(b);
  }
  for (int i = 1; i <= nex; i++) {
    par[i] = i;
  }
  vector<int> dist(nex + 1, mod);
  queue<int> Q;
  for (int i = 1; i <= r; i++) {
    int v;
    cin >> v;
    dist[v] = 0;
    Q.push(v);
  }
  while ((int)Q.size()) {
    int v = Q.front();
    Q.pop();
    if (dist[v] < k) {
      for (int to : adj[v]) {
        unite(v, to);
        if (dist[v] + 1 < dist[to]) {
          dist[to] = dist[v] + 1;
          Q.push(to);
        }
      }
    }
  }
  dfs(1);
  cin >> q;
  while (q--) {
    int a, b;
    cin >> a >> b;
    if (can(a, b)) {
      cout << "YES\n";
    } else {
      cout << "NO\n";
    }
  }
  return 0;
}
