#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 101;
struct mat {
  long long a[MAXN][MAXN] = {{0}};
};
mat a, o, in;
mat operator*(mat x, mat y) {
  mat z;
  for (int i = 0; i < MAXN; i++)
    for (int j = 0; j < MAXN; j++)
      for (int k = 0; k < MAXN; k++)
        z.a[i][j] = (z.a[i][j] + x.a[i][k] * y.a[k][j] % MOD) % MOD;
  return z;
}
mat operator-(mat x, mat y) {
  mat z;
  for (int i = 0; i < MAXN; i++)
    for (int j = 0; j < MAXN; j++)
      z.a[i][j] = (x.a[i][j] - y.a[i][j] + MOD) % MOD;
  return z;
}
mat operator+(mat x, mat y) {
  mat z;
  for (int i = 0; i < MAXN; i++)
    for (int j = 0; j < MAXN; j++) z.a[i][j] = (x.a[i][j] + y.a[i][j]) % MOD;
  return z;
}
mat operator*(mat x, long long y) {
  mat z;
  for (int i = 0; i < MAXN; i++)
    for (int j = 0; j < MAXN; j++) z.a[i][j] = (x.a[i][j] * y) % MOD;
  return z;
}
mat bin(mat x, int b) {
  mat ret = o;
  while (b) {
    if (b & 1) ret = ret * x;
    x = x * x;
    b /= 2;
  }
  return ret;
}
long long binn(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = (ret * a) % MOD;
    a = (a * a) % MOD;
    b /= 2;
  }
  return ret;
}
int main() {
  for (int i = 0; i < MAXN; i++) o.a[i][i] = 1, a.a[i][i - 1] = 1;
  int n, x;
  scanf("%d", &(n)), scanf("%d", &(x));
  for (int i = 0; i < n; i++) {
    int d;
    scanf("%d", &(d));
    a.a[0][d - 1]++;
  }
  int sm = 0;
  for (int i = 0; i < MAXN; i++) {
    for (int j = i; j < MAXN; j++) in.a[j][i] = -(sm - 1);
    sm += a.a[0][i];
  }
  if (sm == 1) return !printf("%d\n", (x + 1));
  long long tmp = binn(sm - 1, MOD - 2);
  for (int i = 0; i < MAXN; i++) {
    for (int j = 0; j < i; j++) in.a[j][i] = sm;
    sm -= a.a[0][i];
  }
  in = in * tmp;
  mat ans = (bin(a, x + 1) - o) * in;
  printf("%I64d\n", (ans.a[0][0]));
  return 0;
}
