#include <bits/stdc++.h> 
using namespace std;
#define     ll              long long
#define     mp              make_pair
#define     rep(i,a,b)      for( i=a;i<b;++i)
#define     repr(i,a,b)     for( i=a;i>=b;i--)
#define     up              upper_bound
#define     lb              lower_bound
#define     t()             int test;cin>>test;while(test--)
#define     IOS             ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

#define TRACE
#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template <typename Arg1>
    void __f(const char* name, Arg1&& arg1){
        cout << name << " : " << arg1 << endl;
        //use cerr if u want to display at the bottom
    }
    template <typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names + 1, ','); cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
    }
#else
#define trace(...)
#endif

const ll mod = 1e9 + 7;

ll nCr(ll n,ll r){
    ll f[1001] = {0};
    f[0] = f[1] = 1;
    for(ll i = 2;i <= n;i++){
        f[i] = 1;
        for(ll j = i-1;j >= 1;j--){
            f[j] = (f[j]+f[j-1])%mod;
        }
    }
    return f[r];
}

int main()
{  
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    IOS;
    ll t;
    cin >> t;
    while(t--){
        ll n,k;
        cin >> n >> k;
        ll a[n];
        for(ll i = 0;i < n;i++){
            cin >> a[i];
        }
        sort(a,a+n);
        reverse(a,a+n);
        ll count = 0,temp = 0;
        for(ll i = 0;i < n;i++){
            if(a[i] == a[k-1]){
                count++;
                if(i < k){
                    temp++;
                }
            }
        }
        cout << nCr(count,temp) << "\n";
    }
    return 0;
}