#include <bits/stdc++.h>
using namespace std;
struct node {
  vector<int> v, pref, suf;
  int aff, dep, odw, parent, wyn, up;
};
node tab[100005];
void dfs(int a) {
  tab[a].odw = 1;
  tab[a].wyn = -1000000;
  if (tab[a].aff) tab[a].wyn = 0;
  int dupa = -1;
  for (auto i = (0); i <= (((int)((tab[a].v).size())) - 1); ++i) {
    int it = tab[a].v[i];
    if (!tab[it].odw) {
      tab[it].parent = a;
      tab[it].dep = tab[a].dep + 1;
      dfs(it);
      tab[a].wyn = max(tab[a].wyn, tab[it].wyn + 1);
    } else {
      dupa = i;
    }
  }
  if (dupa != -1) {
    swap(tab[a].v[dupa], tab[a].v[(int)((tab[a].v).size()) - 1]);
    tab[a].v.pop_back();
  }
  return;
}
int solve2(int root, int d) {
  int res = (max(tab[root].wyn, tab[root].up) <= d);
  for (auto i = (0); i <= (((int)((tab[root].v).size())) - 1); ++i) {
    tab[root].pref.push_back(tab[tab[root].v[i]].wyn);
    tab[root].suf.push_back(tab[root].pref[i]);
  }
  for (auto i = (1); i <= ((int)((tab[root].v).size()) - 1); ++i)
    tab[root].pref[i] = max(tab[root].pref[i], tab[root].pref[i - 1]);
  for (auto i = ((int)((tab[root].v).size()) - 2); i >= (0); --i)
    tab[root].suf[i] = max(tab[root].suf[i], tab[root].suf[i + 1]);
  for (auto i = (0); i <= (((int)((tab[root].v).size())) - 1); ++i) {
    int it = tab[root].v[i];
    tab[it].up = tab[root].up + 1;
    if (i != 0) {
      tab[it].up = max(tab[it].up, tab[root].pref[i - 1] + 2);
    }
    if (i != (int)((tab[root].v).size()) - 1) {
      tab[it].up = max(tab[it].up, tab[root].suf[i + 1] + 2);
    }
    res += solve2(it, d);
  }
  return res;
}
void jebaj() {
  int n, m, d;
  cin >> n >> m >> d;
  for (auto i = (0); i <= ((m)-1); ++i) {
    int a;
    cin >> a;
    tab[a].aff = 1;
  }
  for (auto i = (0); i <= ((n - 1) - 1); ++i) {
    int a, b;
    cin >> a >> b;
    tab[a].v.push_back(b);
    tab[b].v.push_back(a);
  }
  int root = 0;
  for (auto i = (1); i <= (n); ++i)
    if (tab[i].aff) root = i;
  tab[root].dep = 1;
  dfs(root);
  tab[root].up = 0;
  cout << solve2(root, d) << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  int t;
  t = 1;
  for (auto i = (0); i <= ((t)-1); ++i) {
    jebaj();
  }
}
