//找规律优化转移 #include<stdio.h> #include<string.h> const int mod=100000007; const int maxn=10500; int dp[2][maxn]; int a[maxn]; int main() { int T; int n,m,i,j,k; scanf("%d",&T); for(int cas=1;cas<=T;cas++) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); int flag=1; dp[0][0]=1; for(i=1;i<=n;i++) { for(k=0;k<=m;k++){ dp[flag][k]=dp[1-flag][k]; if(k>=a[i] )dp[flag][k]=(dp[flag][k-a[i]]+dp[flag][k])%mod; } flag=1-flag; } printf("Case %d: %d\n",cas,dp[1-flag][m]); } return 0; }