package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 1000000007
func main() {
in := bufio.NewReader(os.Stdin)
var d, n int
fmt.Fscan(in, &d, &n)
a := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
}
g := make([][]int, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(in, &u, &v)
g[u] = append(g[u], v)
g[v] = append(g[v], u)
}
ans := 0
for i := 1; i <= n; i++ {
var dfs func(u, p int) int
dfs = func(u, p int) int {
res := 1
for _, v := range g[u] {
if v == p {
continue
}
if a[v] < a[i] || a[v] > a[i]+d {
continue
}
if a[v] == a[i] && v < i {
continue
}
child := dfs(v, u)
res = int((int64(res) * int64(child+1)) % MOD)
}
return res
}
cnt := dfs(i, 0)
ans += cnt
if ans >= MOD {
ans -= MOD
}
}
fmt.Println(ans % MOD)
}