int mod=(int)(1e9+7);
// int solve(vector<int>&arr,int n,int target,
// vector<vector<int>>&dp
// ){
// if(n==0)
// {
// if(target==0&& arr[0]==0) return 2;
// if(target==0||target==arr[0]) return 1;
// return 0;
// }
// if(dp[n][target]!=-1){
// return dp[n][target];
// }
// //not take
// int nottake=solve(arr,n-1,target,dp);
// int take=0;
// if(arr[n]<=target){
// take=solve(arr,n-1,target-arr[n],dp);
// }
// return dp[n][target]=(take+nottake)%mod;
// }
int findWays(vector<int>& arr, int k)
{
int n=arr.size();
vector<vector<int>>dp(n,vector<int>(k+1,0));
if(arr[0]==0)dp[0][0]=2;
else
dp[0][0]=1;
if(arr[0]<=k&&arr[0]!=0){
dp[0][arr[0]]=1;
}
for(int i=1;i<n;i++){
for(int target=0;target<=k;target++){
//not take
int nottake=dp[i-1][target];
int take=0;
if(arr[i]<=target){
take=dp[i-1][target-arr[i]];
}
dp[i][target]=(take+nottake)%mod;
}
}
return dp[n-1][k];
// return solve(arr,n-1,k,dp);
}