Link to this code: https://cses.fi/paste/776f023fc921e4a4c5e106/
/* ~~Abhimanyu Kadhane~~ */
#include <bits/stdc++.h>
#define ll long long
#define all(x) (x).begin(),(x).end()  
#define allr(x) (x).rbegin(),(x).rend()   
#define M 1000000007
#define int long long
using namespace std;

long long  change(int amount, vector<int>& coins) {
    int n=coins.size();
    vector<int>prevdp(amount+1);
    vector<int>currdp(amount+1);
    prevdp[0]=currdp[0]=1;
    for(int i=1; i<=amount; i++)if(i%coins[0]==0)prevdp[i]++;
    for(int ind=1; ind<n; ind++){
        for(int x=0; x<=amount; x++){
            long long  noTake=prevdp[x];
            long long  take=0;
            if(x>=coins[ind])take=currdp[x-coins[ind]];
            currdp[x]=(take+noTake)%M;
        }
        prevdp=currdp;
    }
    return prevdp[amount];
}

void solve(){
   int n,x;cin>>n>>x;
   vector<int>v(n);
   for(auto &i:v)cin>>i;   
   cout<<change(x,v); 
}

signed main(){
    
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  
  int tt;
  tt=1;
  // cin >> tt;
   
  while (tt--)solve();
  
  return 0;
  
}