가중치가 있는 트리에서 최댓값과 최솟값의 차이가 d 이하인 연결된 공집합 아닌 정점 부분집합의 개수를 센다.
NNN개의 정점으로 이루어진 트리가 있습니다. iii번 정점에는 가중치 a(i)a(i)a(i)가 붙어 있습니다. 여기에 정수 ddd가 하나 주어질 때, 다음 조건을 모두 만족하는 트리의 정점 집합 SSS를 "가능한 집합"이라고 합니다.
"가능한 집합" SSS가 몇 개인지 세는 프로그램을 작성하세요. 답이 매우 커질 수 있으므로 109+710^9+7109+7로 나눈 나머지를 출력합니다.
첫째 줄에 ddd와 NNN이 주어집니다. (0≤d≤200000 \le d \le 200000≤d≤20000, 1≤N≤200001 \le N \le 200001≤N≤20000)
둘째 줄에 a(i)a(i)a(i)를 나타내는 NNN개의 정수가 a(1)a(1)a(1)부터 순서대로 주어집니다. (1≤a(i)≤200001 \le a(i) \le 200001≤a(i)≤20000)
셋째 줄부터 N−1N-1N−1개의 줄에 걸쳐 트리의 간선을 나타내는 두 정수 uuu와 vvv가 주어집니다. (1≤u,v≤N1 \le u, v \le N1≤u,v≤N)
가능한 집합의 개수를 109+710^9+7109+7로 나눈 나머지를 첫째 줄에 출력합니다.
첫 번째 예제에서 가능한 집합은 {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4}, {1, 3, 4}의 여덟 가지입니다.