#include <bits/stdc++.h>
using namespace std;
int cnt[105 + 20];
int f[105 + 20];
int mod = 1000000007;
struct matrix {
  int t[105 + 10][105 + 10];
};
matrix mul(matrix A, matrix B, int m, int n) {
  matrix C;
  memset(C.t, 0, sizeof C.t);
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++)
        C.t[i][j] = ((1ll * A.t[i][k] * B.t[k][j]) % mod + C.t[i][j]) % mod;
  return C;
}
matrix A, B;
int x;
void solve() {
  for (int i = 1; i <= 105; i++) A.t[1][i] = f[i - 1];
  A.t[1][105 + 1] = 1;
  for (int i = 1; i <= 105 - 1; i++) B.t[i + 1][i] = 1;
  for (int i = 1; i <= 105; i++) B.t[i][105] = cnt[105 + 1 - i];
  B.t[2][105 + 1] = 1;
  B.t[105 + 1][105 + 1] = 1;
  while (x > 0) {
    if (x % 2) A = mul(A, B, 1, 105 + 1);
    B = mul(B, B, 105 + 1, 105 + 1);
    x /= 2;
  }
  printf("%d", A.t[1][105 + 1]);
}
int main() {
  int n;
  scanf("%d %d", &n, &x);
  for (int i = 1; i <= n; i++) {
    int d;
    scanf("%d", &d);
    cnt[d]++;
  }
  f[0] = 1;
  for (int i = 1; i <= 105; i++)
    for (int j = 0; j < i; j++) f[i] = (1ll * f[j] * cnt[i - j] + f[i]) % mod;
  solve();
}
