← Home
 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)
}