func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e5 + 1020;   int n, m, d, tmp;   int h[maxn], dis1[maxn], dis2[maxn];   bool mark[maxn], isaffected[maxn];   vector<int> adj[maxn];   pair<int, int> temp;   void dfsa(int v) {     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (!mark[u]) {         mark[u] = true;         h[u] = h[v] + 1;         dfsa(u);         if (h[u] > tmp && isaffected[u]) {           tmp = h[u];           temp.first = u;         }       }     }   }   void dfsb(int v) {     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (!mark[u]) {         mark[u] = true;         h[u] = h[v] + 1;         dfsb(u);         if (h[u] > tmp && isaffected[u]) {           tmp = h[u];           temp.second = u;         }       }     }   }   void dfs1(int v) {     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (!mark[u]) {         mark[u] = true;         dis1[u] = dis1[v] + 1;         dfs1(u);       }     }   }   void dfs2(int v) {     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (!mark[u]) {         mark[u] = true;         dis2[u] = dis2[v] + 1;         dfs2(u);       }     }   }   int main() {     cin >> n >> m >> d;     for (int i = 1; i <= m; i++) {       int x;       cin >> x;       isaffected[x] = true;     }     for (int i = 1; i < n; i++) {       int a, b;       cin >> a >> b;       adj[a].push_back(b);       adj[b].push_back(a);     }     mark[1] = true;     dfsa(1);     for (int i = 1; i <= n; i++) {       h[i] = 0;       mark[i] = false;     }     h[temp.first] = 0;     tmp = 0;     mark[temp.first] = true;     dfsb(temp.first);     for (int i = 1; i <= n; i++) {       mark[i] = false;     }     dis1[temp.first] = 0;     mark[temp.first] = true;     dfs1(temp.first);     for (int i = 1; i <= n; i++) {       mark[i] = false;     }     dis2[temp.second] = 0;     mark[temp.second] = true;     dfs2(temp.second);     for (int i = 1; i <= n; i++) {       mark[i] = false;     }     int ans = 0;     for (int i = 1; i <= n; i++) {       if (max(dis1[i], dis2[i]) <= d) {         ans++;       }     }     cout << ans;   }   