#include <bits/stdc++.h>
using namespace std;
int q[100005];
bool f[100005];
int n, m, d, d1[100005], d2[100005];
vector<int> v[100005];
int bfs(int x) {
  int i, h = 0, t = 0, m, a;
  for (int i = 1; i <= n; i++) d1[i] = -1;
  q[t++] = x;
  d1[x] = 0;
  while (h < t) {
    a = q[h++];
    for (int i = 0; i < v[a].size(); i++) {
      int y = v[a][i];
      if (d1[y] == -1) {
        d1[y] = d1[a] + 1;
        q[t++] = y;
      }
    }
  }
  m = -1;
  for (int i = 1; i <= n; i++) {
    if (f[i] && m < d1[i]) m = d1[i], a = i;
  }
  return a;
}
int main() {
  int a, b, c;
  scanf("%d%d%d", &n, &m, &d);
  for (int i = 1; i <= m; i++) {
    cin >> a;
    f[a] = true;
  }
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &b, &c);
    v[c].push_back(b);
    v[b].push_back(c);
  }
  b = bfs(a);
  a = bfs(b);
  for (int i = 1; i <= n; i++) d2[i] = d1[i];
  b = bfs(a);
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    if (d1[i] <= d && d2[i] <= d) ans++;
  }
  cout << ans << endl;
  return 0;
}
