#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1667,mod=64123;
vector<int> e[N];
int f[N][N];
int g[N],val[N];
int w[N];
int sz[N];
int n,m,maxv;
void add(int a,int b)
{
e[a].push_back(b);
}
void dfs(int u,int fa)
{
int sum=sz[u];
for(auto v:e[u])
{
if(v==fa) continue;
dfs(v,u);
sum+=sz[v];
}
for(int j=0;j<=sum;j++) f[u][j]=0;
f[u][sz[u]]=1;
for(auto v:e[u])
{
if(v==fa) continue;
for(int j=0;j<=sz[u]+sz[v];j++) g[j]=0;
for(int j=sz[u];j>=0;j--)
{
if(!f[u][j]) continue;
(g[j]+=f[u][j])%=mod;
for(int k=0;k<=sz[v];k++)
{
if(!f[v][k]) continue;
(g[j+k]+=f[u][j]*f[v][k]%mod)%=mod;
}
}
sz[u]+=sz[v];
for(int j=0;j<=sz[u];j++) f[u][j]=g[j];
}
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m>>maxv;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=2,a,b;i<=n;i++)
{
cin>>a>>b;
add(a,b),add(b,a);
}
int res=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((w[j]>w[i])||(w[j]==w[i]&&j>=i)) sz[j]=1;
else sz[j]=0;
}
dfs(i,0);
(res+=f[i][m]*w[i]%mod)%=mod;
}
cout<<res<<"\n";
return 0;
}