#include <bits/stdc++.h>
using namespace std;
set<int> tab[2001];
int ai[2001];
long long int p = 1000000007;
long long int f(int nr, int max, int min, int rodzic, int i) {
  long long int wynik = 1;
  set<int>::iterator it;
  for (it = tab[nr].begin(); it != tab[nr].end(); ++it) {
    if (rodzic != *it && ai[*it] <= max && ai[*it] > min)
      wynik = (wynik * (1ll + f(*it, max, min, nr, i))) % p;
    if (rodzic != *it && ai[*it] == min && i < *it)
      wynik = (wynik * (1ll + f(*it, max, min, nr, i))) % p;
  }
  return wynik;
}
int main() {
  int d, n;
  scanf("%d%d", &d, &n);
  for (int i = 1; i <= n; i++) scanf("%d", &ai[i]);
  int a, b;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &a, &b);
    tab[a].insert(b);
    tab[b].insert(a);
  }
  long long int suma = 0;
  for (int i = 1; i <= n; i++) {
    suma = (p + suma + f(i, ai[i] + d, ai[i], -1, i)) % p;
  }
  cout << suma;
  return 0;
}
