n, k = map(int, input().split())
vals = list(map(int, input().split()))

adj = [[] for i in range(n)]
for i in range(n):
    u, v = map(int, input().split())
    adj[u-1].append(v-1)
    adj[v-1].append(u-1)

freq = dict()
for vi in vals:
    freq[vi] = freq.get(vi, 0) + 1

res = 0
for vi in vals:
    targ = vi - k
    if targ in freq:
        res += 2*freq[targ]

if k == 0:
    res -= n

subtree = [dict() for i in range(n)]
for i in range(n):
    subtree[i][vals[i]] = 1

deg = [len(adj[i]) for i in range(n)]
q = []
for i in range(n):
    if deg[i] == 1:
        q.append(i)
    
for i in range(n):
    if i == len(q): break
    cur = q[i]
    deg[cur] = 0

    for nxt in adj[cur]:
        if deg[nxt] == 0: continue
        deg[nxt] -= 1
        if deg[nxt] == 1:
            q.append(nxt)

        if len(subtree[cur]) > len(subtree[nxt]):
            subtree[nxt], subtree[cur] = subtree[cur], subtree[nxt]
        
        for v, f in subtree[cur].items():
            for targ in [v - k, v + k]:
                if targ in subtree[nxt]: 
                    res -= f*subtree[nxt][targ]

        for v, f in subtree[cur].items():
            subtree[nxt][v] = subtree[nxt].get(v, 0) + f

print(res)