#include <bits/stdc++.h>
using namespace std;
struct Matrix {
  long long int mat[103][103];
  Matrix() {
    for (int i = int(0); i <= int(103 - 1); i++)
      for (int j = int(0); j <= int(103 - 1); j++) mat[i][j] = 0;
  }
};
Matrix matMul(Matrix a, Matrix b) {
  Matrix ans;
  int i, j, k;
  for (i = 0; i < 101; i++)
    for (j = 0; j < 101; j++)
      for (ans.mat[i][j] = k = 0; k < 101; k++) {
        ans.mat[i][j] += (a.mat[i][k] * 1ll * b.mat[k][j]) % 1000000007;
        ans.mat[i][j] %= 1000000007;
      }
  return ans;
}
Matrix matPow(Matrix base, int p) {
  Matrix ans;
  int i, j;
  for (i = 0; i < 101; i++)
    for (j = 0; j < 101; j++) ans.mat[i][j] = (i == j);
  while (p) {
    if (p & 1) ans = matMul(ans, base);
    base = matMul(base, base);
    p >>= 1;
  }
  return ans;
}
int no[109];
int main() {
  int n, x;
  scanf("%d", &n);
  scanf("%d", &x);
  for (int i = int(0); i <= int(n - 1); i++) {
    int p;
    scanf("%d", &p);
    no[p]++;
  }
  Matrix base;
  base.mat[0][0] = base.mat[0][1] = 1;
  for (int i = int(1); i <= int(100); i++) base.mat[1][i] = no[i];
  for (int i = int(2); i <= int(100); i++) base.mat[i][i - 1] = 1;
  Matrix val;
  val.mat[1][0] = 1;
  base = matPow(base, x + 1);
  base = matMul(base, val);
  printf("%lld\n", base.mat[0][0]);
  return 0;
}
