Link to this code:
https://cses.fi/paste/4060ef4da6056bb522a9ca/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define rep(i, a, b) for (int i = a; i <=b; i++)
ll n = 3 ;
ll x = 9;
ll a[100];
ll dp[1000001];
ll mod = 1000000007;
ll ans( ll sum)
{
if (dp[sum] != -1)
return dp[sum];
if (sum == 0)
return dp[0] = 1;
ll g = 0;
for (int i = 0; i < n; i++) {
if (a[i] <= sum) {
g += (ans(sum - a[i]) ) % (mod);
g %= (mod);
}
}
return dp[sum] = g;
}
int main()
{
cin >> n >> x;
rep(i, 0, n - 1) {
cin >> a[i];
}
memset(dp , -1, sizeof dp);
cout << ans(x);
}