#include #define ALL(v) std::begin(v),std::end(v) using lint=long long; using ld=long double; lint mod=1'000'000'007; lint inverse(lint x){ assert(x%mod); lint y=1,u=mod,v=0; while(x){lint q=u/x;u-=q*x;std::swap(u,x);v-=q*y;std::swap(v,y);} assert(x==0&&std::abs(u)==1&&std::abs(y)==mod&&std::abs(v)>=1){if(y&1)z*=x;x*=x;}return z;} mint operator-(mint x){return mint(-x.value);} using poly_t=std::vector; namespace moly_utils { static poly_t mod, qd, qinv; static lint deg; static void generate(poly_t v){ mod=([&v]{while(!v.empty()&&v.back()==0)v.pop_back();return v;}()); qd=mod;mint t=1/qd.back();qd.pop_back();for(mint&x:qd)x*=-t; qinv=mod;qinv.erase(qinv.begin());for(mint&x:qinv)x=-x; deg=v.size()-1; assert(deg); } static poly_t&normalize(poly_t&a){ for(;deg<(lint)a.size();a.pop_back()){ for(lint i=0;iil):value(il){} mint const&at(std::size_t i)const&{return value.at(i);} mint&at(std::size_t i)&{return value.at(i);} std::size_t size()const&{return value.size();} static moly qd(){return moly_utils::qd;} static moly qinv(){return moly_utils::qinv;} }; std::ostream&operator<<(std::ostream&os,moly const&a){return os<>=1){if(b&1)ans*=a;a*=a;}return ans;} int main(){ std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false); std::cout.setf(std::ios_base::fixed);std::cout.precision(15); lint n,w,k;std::cin>>n>>w>>k; std::vectordp(w+w+1); dp.at(0)=1; std::vectora(n); for(lint&x:a)std::cin>>x; for(lint i=0;i<=w+w;i++){ for(lint x:a){ if(w+w