← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD = 1000000007

func power(base, exp int64) int64 {
	res := int64(1)
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func modInverse(n int64) int64 {
	return power(n, MOD-2)
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, D int
	if _, err := fmt.Fscan(reader, &n, &D); err != nil {
		return
	}

	p := make([]int, n+1)
	for i := 2; i <= n; i++ {
		fmt.Fscan(reader, &p[i])
	}

	k := n + 1
	f := make([]int64, n+1)
	y := make([]int64, k+1)
	dp := make([]int64, n+1)

	for x := 1; x <= k; x++ {
		for i := 1; i <= n; i++ {
			dp[i] = 1
		}
		for u := n; u >= 2; u-- {
			f[u] = (f[u] + dp[u])
			if f[u] >= MOD {
				f[u] -= MOD
			}
			pu := p[u]
			dp[pu] = (dp[pu] * f[u]) % MOD
		}
		f[1] = (f[1] + dp[1])
		if f[1] >= MOD {
			f[1] -= MOD
		}
		y[x] = f[1]
	}

	if D <= k {
		fmt.Println(y[D])
		return
	}

	dVal := int64(D) % MOD
	pref := make([]int64, k+2)
	suff := make([]int64, k+2)
	
	pref[0] = 1
	for i := 1; i <= k; i++ {
		val := (dVal - int64(i)) % MOD
		if val < 0 {
			val += MOD
		}
		pref[i] = (pref[i-1] * val) % MOD
	}
	
	suff[k+1] = 1
	for i := k; i >= 1; i-- {
		val := (dVal - int64(i)) % MOD
		if val < 0 {
			val += MOD
		}
		suff[i] = (suff[i+1] * val) % MOD
	}

	fact := make([]int64, k+1)
	fact[0] = 1
	for i := 1; i <= k; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}

	ans := int64(0)
	for i := 1; i <= k; i++ {
		num := (pref[i-1] * suff[i+1]) % MOD
		den := (fact[i-1] * fact[k-i]) % MOD
		if (k-i)%2 == 1 {
			den = (MOD - den) % MOD
		}
		
		term := (y[i] * num) % MOD
		term = (term * modInverse(den)) % MOD
		ans = (ans + term) % MOD
	}

	fmt.Println(ans)
}