#include<bits/stdc++.h>
using namespace std;
const long long M=3e5+10,MOD=1e9+7;
typedef long long ll;
long long bigmod ( long long a, long long p, long long m )
{
long long res =1;
long long x = a;
while ( p )
{
if ( p & 1 ) //p is odd
{
res = ( res * x )%m;
}
x = ( x * x )%m;
p = p >> 1;
}
return res;
}
ll nCrMod(ll n, ll r) {
ll Res = 1;
ll rem_sum=0;
for (ll i = 0; i < r; ++i) {
rem_sum=(rem_sum + Res)%MOD;
Res =(Res * (n - i))%MOD;
Res = (Res *bigmod(i + 1, MOD - 2,MOD))%MOD;
}
return rem_sum;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t=1;
cin>>t;
while(t--){
ll n,k;
cin>>n>>k;
ll sum=0;
for(int i=1;i<=n;i++){
int a;
cin>>a;
sum+=a;
}
if(k>sum){
cout<<"0\n";
continue;
}
ll pos_way=bigmod(2,n-sum,MOD)%MOD;
ll total_pos=bigmod(2,sum,MOD)%MOD;
ll make_way=nCrMod(sum,k)%MOD;
ll remainig=(total_pos-make_way+MOD)%MOD;
ll ans=(pos_way * remainig)%MOD;
ans=(ans-1LL+MOD)%MOD;
cout<<ans<<"\n";
}
return 0;
}