#include <bits/stdc++.h>
#define Hoshimachi signed
#define Suisei main
using namespace std;
#define int long long
#define tup tuple<int,int,int>
const int N=2e5+5,mod=1e9+7;
// nho reset
int n,t,a[N];
vector<int> adj[N];
int sz[N];
bool vis[N],ok[N],del[N];
void dfs_sz(int u, int par){
sz[u]=1;
vis[u]=1;
for(auto v:adj[u]){
if(v==par or !ok[v] or del[v]) continue;
dfs_sz(v,u);
sz[u]+=sz[v];
}
}
void dfssum(int u, int par, int k, int &s){
for(auto v:adj[u]){
if(v==par or !ok[v]) continue;
s+=sz[v]*(k-sz[v]);
dfssum(v,u,k,s);
}
}
void resetfull(){
for(int i=1; i<=n; i++){
sz[i]=0;
vis[i]=ok[i]=del[i]=0;
}
}
int Solve(int lim){
resetfull();
vector<int> st;
for(int i=1; i<=n; i++){
if(a[i]<=lim) ok[i]=1;
else ok[i]=0;
}
vector<vector<int>> tplt;
int ans=0;
for(int i=1; i<=n; i++){
if(ok[i] && !vis[i]){
dfs_sz(i,0);
int k=sz[i],s=0;
dfssum(i,0,k,s);
ans=(ans+(k-2)*s)%mod;
}
}
return ans;
}
Hoshimachi Suisei(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
// freopen(".inp", "r", stdin);
// freopen(".out", "w", stdout);
cin>>n>>t;
for(int i=1; i<=n; i++){
cin>>a[i];
}
for(int i=1; i<n; i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
cout<<(Solve(t)-Solve(t-1)+mod)%mod;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgSG9zaGltYWNoaSBzaWduZWQKI2RlZmluZSBTdWlzZWkgbWFpbgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSB0dXAgdHVwbGU8aW50LGludCxpbnQ+CmNvbnN0IGludCBOPTJlNSs1LG1vZD0xZTkrNzsKLy8gbmhvIHJlc2V0CmludCBuLHQsYVtOXTsKdmVjdG9yPGludD4gYWRqW05dOwppbnQgc3pbTl07CmJvb2wgdmlzW05dLG9rW05dLGRlbFtOXTsKdm9pZCBkZnNfc3ooaW50IHUsIGludCBwYXIpewogICAgc3pbdV09MTsKICAgIHZpc1t1XT0xOwogICAgZm9yKGF1dG8gdjphZGpbdV0pewogICAgICAgIGlmKHY9PXBhciBvciAhb2tbdl0gb3IgZGVsW3ZdKSBjb250aW51ZTsKICAgICAgICBkZnNfc3oodix1KTsKICAgICAgICBzelt1XSs9c3pbdl07CiAgICB9Cn0Kdm9pZCBkZnNzdW0oaW50IHUsIGludCBwYXIsIGludCBrLCBpbnQgJnMpewogICAgZm9yKGF1dG8gdjphZGpbdV0pewogICAgICAgIGlmKHY9PXBhciBvciAhb2tbdl0pIGNvbnRpbnVlOwogICAgICAgIHMrPXN6W3ZdKihrLXN6W3ZdKTsKICAgICAgICBkZnNzdW0odix1LGsscyk7CiAgICB9Cn0Kdm9pZCByZXNldGZ1bGwoKXsKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspewogICAgICAgIHN6W2ldPTA7CiAgICAgICAgdmlzW2ldPW9rW2ldPWRlbFtpXT0wOwogICAgfQp9CmludCBTb2x2ZShpbnQgbGltKXsKICAgIHJlc2V0ZnVsbCgpOwogICAgdmVjdG9yPGludD4gc3Q7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKXsKICAgICAgICBpZihhW2ldPD1saW0pIG9rW2ldPTE7CiAgICAgICAgZWxzZSBva1tpXT0wOwogICAgfQogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiB0cGx0OwogICAgaW50IGFucz0wOwogICAgZm9yKGludCBpPTE7IGk8PW47IGkrKyl7CiAgICAgICAgaWYob2tbaV0gJiYgIXZpc1tpXSl7CiAgICAgICAgICAgIGRmc19zeihpLDApOwogICAgICAgICAgICBpbnQgaz1zeltpXSxzPTA7CiAgICAgICAgICAgIGRmc3N1bShpLDAsayxzKTsKICAgICAgICAgICAgYW5zPShhbnMrKGstMikqcyklbW9kOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0KSG9zaGltYWNoaSBTdWlzZWkoKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIC8vIGZyZW9wZW4oIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgIC8vIGZyZW9wZW4oIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBjaW4+Pm4+PnQ7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKXsKICAgICAgICBjaW4+PmFbaV07CiAgICB9CiAgICBmb3IoaW50IGk9MTsgaTxuOyBpKyspewogICAgICAgIGludCB1LHY7CiAgICAgICAgY2luPj51Pj52OwogICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIGNvdXQ8PChTb2x2ZSh0KS1Tb2x2ZSh0LTEpK21vZCklbW9kOwp9Cg==