#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long fme(long long a, long long b, long long mod) {
  if (b == 0) return 1;
  if (b & 1) return fme(a, b - 1, mod) * a % mod;
  long long tmp = fme(a, b / 2, mod);
  return tmp * tmp % mod;
}
const int MAXN = 3004;
inline long long inv(long long a) {
  static int pc[2 * MAXN];
  if (pc[a + MAXN]) return pc[a + MAXN];
  return pc[a + MAXN] = fme((a % MOD + MOD) % MOD, MOD - 2, MOD);
}
long long dp[MAXN][MAXN];
int n;
vector<int> childs[MAXN];
void dfs(int cur) {
  for (int i = 1; i < MAXN; i++) {
    dp[cur][i] = 1;
    for (auto a : childs[cur]) {
      if (i == 1) dfs(a);
      dp[cur][i] = dp[cur][i] * dp[a][i] % MOD;
    }
    dp[cur][i] = (dp[cur][i - 1] + dp[cur][i]) % MOD;
  }
}
int32_t main() {
  ios::sync_with_stdio(false);
  int a, D;
  cin >> n >> D;
  for (int i = 1; i < n; i++) {
    cin >> a;
    childs[a - 1].push_back(i);
  }
  dfs(0);
  int C = n + 2;
  long long res = 0;
  for (int i = 0; i < C; i++) {
    long long r = 1;
    for (int j = 0; j < C; j++) {
      if (j == i) continue;
      r = r * (D - j) % MOD * inv(i - j) % MOD;
    }
    res += (r * dp[0][i] % MOD + MOD) % MOD;
  }
  cout << res % MOD << "\n";
}
