#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
int n, k, r;
int halfK;
vector<vector<int>> g;
vector<int> ss;
vector<int> depth;
vector<vector<int>> pa;
int find(int a) {
  if (ss[a] != a) ss[a] = find(ss[a]);
  return ss[a];
}
void merge(int a, int b) { ss[find(a)] = find(b); }
void bfs(int s) {
  queue<int> qq;
  qq.push(s);
  depth[s] = 0;
  pa[s] = vector<int>(19, s);
  while (!qq.empty()) {
    int p = qq.front();
    qq.pop();
    for (int ne : g[p]) {
      if (depth[ne] == INT_MAX) {
        depth[ne] = depth[p] + 1;
        qq.push(ne);
        pa[ne] = vector<int>(19);
        pa[ne][0] = p;
        for (int k = 1; k < 19; k++) {
          pa[ne][k] = pa[pa[ne][k - 1]][k - 1];
        }
      }
    }
  }
}
int la(int a, int len) {
  int s = a;
  for (int i = 0; i < 19; i++) {
    if (len & (1 << i)) s = pa[s][i];
  }
  return s;
}
int lcp(int a, int b) {
  if (depth[a] < depth[b]) swap(a, b);
  a = la(a, depth[a] - depth[b]);
  if (a == b) return a;
  for (int i = 18; i >= 0; i--) {
    int aa = la(a, 1 << i);
    int bb = la(b, 1 << i);
    if (aa != bb) {
      a = aa;
      b = bb;
    }
  }
  return pa[a][0];
}
int walk(int a, int b, int p, int x) {
  if (depth[a] - depth[p] >= x)
    return la(a, x);
  else
    return la(b, depth[a] + depth[b] - 2 * depth[p] - x);
}
bool query(int a, int b) {
  int lp = lcp(a, b);
  if (depth[a] + depth[b] - depth[lp] * 2 <= k) return true;
  return find(walk(a, b, lp, halfK)) == find(walk(b, a, lp, halfK));
}
void solve() {
  cin >> n >> k >> r;
  g = vector<vector<int>>(n);
  int oldn = n;
  for (int i = 0; i < oldn - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g.push_back(vector<int>());
    g[a].push_back(n);
    g[b].push_back(n);
    g[n].push_back(a);
    g[n].push_back(b);
    n++;
  }
  halfK = k;
  k *= 2;
  vector<int> dist(n, INT_MAX);
  pa = vector<vector<int>>(n);
  queue<int> qq;
  for (int i = 0; i < r; i++) {
    int t;
    cin >> t;
    t--;
    dist[t] = 0;
    qq.push(t);
  }
  ss = vector<int>(n);
  for (int i = 0; i < n; i++) {
    ss[i] = i;
  }
  while (!qq.empty()) {
    int p = qq.front();
    qq.pop();
    if (dist[p] >= halfK) break;
    for (int ne : g[p]) {
      merge(p, ne);
      int d = dist[p] + 1;
      if (dist[ne] == INT_MAX) {
        dist[ne] = d;
        qq.push(ne);
      }
    }
  }
  depth = vector<int>(n, INT_MAX);
  bfs(0);
  int v;
  cin >> v;
  for (int i = 0; i < v; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    if (query(a, b))
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
  return 0;
}
