// Problem: No.137 貯金箱の焦り // Contest: yukicoder // URL: https://yukicoder.me/problems/no/137 // Memory Limit: 512 MB // Time Limit: 5000 ms /* hxz还是爬的好 */ #include using namespace std; #define ll long long #define f(i,a,b) for(ll i=a;i<=b;i++) #define wt int tt=d;while(tt--) #define py puts("Yes") #define pn puts("No") #define pritnf printf #define edfl endl #define fe(i,e) for(int i=0;i inline ll rd() { ll x=0,f=1; char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c))x=x*10+c-'0',c=getchar(); return x*f; } namespace binom{ const ll Lim=300010,mod=998244353; ll jc[Lim],inv[Lim],inc[Lim]; void pre(){ jc[0]=jc[1]=inc[0]=inc[1]=inv[0]=inv[1]=1; f(i,2,Lim-1)jc[i]=jc[i-1]*i%mod,inv[i]=(mod-mod/i)*inv[mod%i]%mod, inc[i]=inc[i-1]*inv[i]%mod; }ll C(ll n,ll m){if(n<0||m<0||n>=1; }return ans; }ll n,m; ll dp[110][50010];//前 i-1 位与m相同,第i位及以上的值=j 的方案数 ll a[510],s; const ll mod=1234567891; int main(){ n=d,m=d; f(i,1,n)a[i]=d,s+=a[i];dp[0][0]=1; f(i,1,n)for(int j=2*s-a[i];j>=0;j--)dp[0][j+a[i]]=(dp[0][j+a[i]]+dp[0][j])%mod; f(bit,1,63){ f(i,0,2*s)if((i&1)==((m>>(bit-1))&1))dp[bit][i>>1]=(dp[bit][i>>1]+dp[bit-1][i])%mod; f(i,1,n)for(int j=2*s-a[i];j>=0;j--)dp[bit][j+a[i]]=(dp[bit][j+a[i]]+dp[bit][j])%mod; }cout<