#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e5 + 500, D = (int)101;
const long long mod = (int)1e9 + 7;
int n, a, x;
int cnt[105];
typedef struct Matrix {
  long long a[D][D];
  Matrix() { memset(a, 0, sizeof(a)); }
  void set_up() {
    for (int i = 0; i <= 98; i++) {
      a[i][i + 1] = 1;
    }
    for (int j = 0; j <= 99; j++) a[99][j] = a[100][j] = cnt[100 - j];
    a[100][100] = 1;
  }
  void init() {
    for (int i = 0; i < 101; i++) a[i][i] = 1;
  }
  Matrix operator*(const Matrix &B) const {
    Matrix C;
    for (int i = 0; i < D; i++)
      for (int j = 0; j < D; j++)
        for (int k = 0; k < D; k++)
          C.a[i][j] = (C.a[i][j] + 1LL * a[i][k] * B.a[k][j]) % mod;
    return C;
  }
  Matrix operator^(const long long &p) const {
    Matrix A = (*this), res;
    res.init();
    long long t = p;
    while (t) {
      if (t & 1) res = res * A;
      A = A * A;
      t >>= 1;
    }
    return res;
  }
} mat;
int main() {
  cin >> n >> x;
  for (int i = 0; i < n; i++) {
    cin >> a;
    cnt[a]++;
  }
  mat mtx;
  mtx.set_up();
  mtx = (mtx ^ x);
  cout << (mtx.a[100][99] + mtx.a[100][100]) % mod << endl;
}
