#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; const ll MOD=1e9+7; vector> matrixmul(int l, int m, int n, vector> a, vector> b){ vector> c(l, vector(n)); for(int i=0; i> matrixpow(int n, vector> a, ll k){ vector> ap=a, ans(n, vector(n)); for(int i=0; i>=1; } return ans; } ll powmod(ll a, ll k){ ll ap=a, ans=1; while(k){ if(k&1){ ans*=ap; ans%=MOD; } ap=ap*ap; ap%=MOD; k>>=1; } return ans; } ll inv(ll a){ return powmod(a, MOD-2); } int main() { int n, w; ll k; cin>>n>>w>>k; int a[100]; for(int i=0; i>a[i]; ll dp[100]={}, dp2[100]={}; dp[0]=1; for(int i=1; i<=w; i++){ for(int j=0; j=0) (dp[i]+=dp[i-a[j]])%=MOD; } } dp2[0]=1; for(int i=1; i<=2*w; i++){ if(i==w) continue; for(int j=0; j=0) (dp2[i]+=dp2[i-a[j]])%=MOD; } } vector> mat(2, vector(2)); mat[0][1]=1, mat[1][0]=dp2[2*w], mat[1][1]=dp[w]; auto matp=matrixpow(2, mat, k); cout<<(matp[0][0]+matp[0][1]*dp[w])%MOD<