#include <bits/stdc++.h>
using namespace std;
const long long N = 200;
const long long INF = 3e18;
const long long MOD = 1000000007;
struct mt1 {
  long long a[N];
};
struct mt2 {
  long long a[N][N];
};
long long b[N];
mt2 ans, ans1;
mt2 c, d;
mt1 k;
mt2 p;
mt2 e;
void mul1() {
  for (int i = 1; i <= 101; i++)
    for (int j = 1; j <= 101; j++) {
      ans1.a[i][j] = 0;
      for (int k = 1; k <= 101; k++)
        ans1.a[i][j] = (ans1.a[i][j] + c.a[i][k] * d.a[k][j]) % MOD;
    }
}
mt1 mul2() {
  mt1 ans;
  for (int i = 1; i <= 101; i++) {
    ans.a[i] = 0;
    for (int j = 1; j <= 101; j++)
      ans.a[i] = (ans.a[i] + k.a[j] * p.a[j][i]) % MOD;
  }
  return ans;
}
void POW(long long b) {
  if (b == 1) {
    ans = e;
    return;
  }
  POW(b / 2);
  c = ans;
  d = ans;
  mul1();
  ans = ans1;
  if (b % 2) {
    c = ans;
    d = e;
    mul1();
    ans = ans1;
  }
}
int main() {
  ifstream inf("input.txt");
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, x;
  cin >> n >> x;
  for (int i = 1; i <= n; i++) {
    long long x;
    cin >> x;
    b[x]++;
  }
  mt1 m1;
  for (int i = 1; i <= 100; i++) m1.a[i] = 0;
  m1.a[101] = 1;
  mt2 m2;
  for (int i = 1; i <= 101; i++)
    for (int j = 1; j <= 101; j++) m2.a[i][j] = 0;
  for (int i = 1; i <= 100; i++) m2.a[i][1] = b[i];
  m2.a[101][1] = 1;
  for (int i = 2; i <= 100; i++) m2.a[i - 1][i] = 1;
  m2.a[101][101] = 1;
  k = m1;
  e = m2;
  POW(x + 1);
  p = ans;
  cout << mul2().a[1];
}
