#include <bits/stdc++.h>
using namespace std;
namespace SETS {
int fa[400005];
void init(int n) {
  for (int i = 1; i <= n; i++) fa[i] = i;
}
int find_father(int x) { return (fa[x] == x) ? x : fa[x] = find_father(fa[x]); }
bool check(int x, int y) {
  x = find_father(x);
  y = find_father(y);
  return x != y;
}
void merge(int x, int y) {
  x = find_father(x);
  y = find_father(y);
  if (x == y) return;
  fa[x] = y;
}
}  // namespace SETS
vector<int> e[400005];
int dep[400005], fa[400005][20];
void dfs(int x) {
  for (int i = 0; i < e[x].size(); i++)
    if (e[x][i] != fa[x][0]) {
      int u = e[x][i];
      fa[u][0] = x;
      dep[u] = dep[x] + 1;
      for (int j = 1; j < 20; j++) fa[u][j] = fa[fa[u][j - 1]][j - 1];
      dfs(u);
    }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  int d = dep[x] - dep[y];
  for (int i = 0; i < 20; i++)
    if ((d >> i) & 1) x = fa[x][i];
  if (x == y) return x;
  for (int i = 19; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) {
      x = fa[x][i];
      y = fa[y][i];
    }
  return fa[x][0];
}
int jump(int x, int d) {
  for (int i = 0; i < 20; i++)
    if ((d >> i) & 1) x = fa[x][i];
  return x;
}
queue<int> q;
int num[200005], dis[400005];
void bfs(int k, int d) {
  memset(dis, 0x3f, sizeof(dis));
  for (int i = 1; i <= k; i++) {
    dis[num[i]] = 0;
    q.push(num[i]);
  }
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    if (dis[x] < d) {
      for (int i = 0; i < e[x].size(); i++) {
        int u = e[x][i];
        SETS::merge(x, u);
        if (dis[x] + 1 < dis[u]) {
          dis[u] = dis[x] + 1;
          q.push(u);
        }
      }
    }
  }
}
int main() {
  int n, d, k;
  scanf("%d%d%d", &n, &d, &k);
  SETS::init(2 * n - 1);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[x].push_back(n + i);
    e[n + i].push_back(x);
    e[y].push_back(n + i);
    e[n + i].push_back(y);
  }
  dfs(1);
  for (int i = 1; i <= k; i++) scanf("%d", &num[i]);
  bfs(k, d);
  int m;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    int p = lca(x, y), len = dep[x] + dep[y] - 2 * dep[p];
    if (len <= 2 * d) {
      puts("YES");
      continue;
    }
    int u = ((dep[x] - dep[p] >= d) ? jump(x, d) : jump(y, len - d));
    int v = ((dep[y] - dep[p] >= d) ? jump(y, d) : jump(x, len - d));
    puts((SETS::check(u, v)) ? "NO" : "YES");
  }
  return 0;
}
