// #include <bits/allocator.h>
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include "bits/stdc++.h"
using namespace std;
using ll = long long int;
mt19937_64 RNG(chrono::high_resolution_clock::now().time_since_epoch().count());
int main()
{
ios::sync_with_stdio(false); cin.tie(0);
int t; cin >> t;
while (t--) {
int n, k; cin >> n >> k;
vector<int> c(n, 0);
for (int &x : c) cin >> x;
string a; cin >> a;
if (a.back() == '1') {
reverse(c.begin(),c.end());
for (auto &x : a) x ^= '0'^'1';
}
int suf = 0;
for (int i = 0; i < k; ++i) {
if (a[k-1-i] != a[k-1]) break;
++suf;
}
vector<int> ord(n, 0);
iota(begin(ord), end(ord), 0);
sort(ord.begin(),ord.end(), [&] (int i, int j) {return c[i] > c[j];});
ll ans = 0, have = 0;
int sub = 1e9;cout<<suf<<endl;
for (int i = 0; i < k; ++i) { cout<<c[ord[i]]<<endl;
ans += c[ord[i]];
if (ord[i] >= n-(k-suf)-1) {cout<<"hola"<<endl;
have += 1;
sub = min(sub, c[ord[i]]);
}
}
if (have == k-suf+1) {
ans += c[ord[k]] - sub;
}
cout << ans%1000000007 << '\n';
}
}
Ly8gI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+Ci8vICNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyx1bnJvbGwtbG9vcHMiKQovLyAjcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsYm1pLGJtaTIsbHpjbnQscG9wY250IikKI2luY2x1ZGUgImJpdHMvc3RkYysrLmgiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nIGludDsKbXQxOTkzN182NCBSTkcoY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKDApOwoKICAgIGludCB0OyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbiwgazsgY2luID4+IG4gPj4gazsKICAgICAgICB2ZWN0b3I8aW50PiBjKG4sIDApOwogICAgICAgIGZvciAoaW50ICZ4IDogYykgY2luID4+IHg7CiAgICAgICAgc3RyaW5nIGE7IGNpbiA+PiBhOwoKICAgICAgICBpZiAoYS5iYWNrKCkgPT0gJzEnKSB7CiAgICAgICAgICAgIHJldmVyc2UoYy5iZWdpbigpLGMuZW5kKCkpOwogICAgICAgICAgICBmb3IgKGF1dG8gJnggOiBhKSB4IF49ICcwJ14nMSc7CiAgICAgICAgfQoKICAgICAgICBpbnQgc3VmID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7ICsraSkgewogICAgICAgICAgICBpZiAoYVtrLTEtaV0gIT0gYVtrLTFdKSBicmVhazsKICAgICAgICAgICAgKytzdWY7CiAgICAgICAgfQoKICAgICAgICB2ZWN0b3I8aW50PiBvcmQobiwgMCk7CiAgICAgICAgaW90YShiZWdpbihvcmQpLCBlbmQob3JkKSwgMCk7CiAgICAgICAgc29ydChvcmQuYmVnaW4oKSxvcmQuZW5kKCksIFsmXSAoaW50IGksIGludCBqKSB7cmV0dXJuIGNbaV0gPiBjW2pdO30pOwoKICAgICAgICBsbCBhbnMgPSAwLCBoYXZlID0gMDsKICAgICAgICBpbnQgc3ViID0gMWU5O2NvdXQ8PHN1Zjw8ZW5kbDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7ICsraSkgeyBjb3V0PDxjW29yZFtpXV08PGVuZGw7CiAgICAgICAgICAgIGFucyArPSBjW29yZFtpXV07CiAgICAgICAgICAgIGlmIChvcmRbaV0gPj0gbi0oay1zdWYpLTEpIHtjb3V0PDwiaG9sYSI8PGVuZGw7CiAgICAgICAgICAgICAgICBoYXZlICs9IDE7CiAgICAgICAgICAgICAgICBzdWIgPSBtaW4oc3ViLCBjW29yZFtpXV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGF2ZSA9PSBrLXN1ZisxKSB7CiAgICAgICAgICAgIGFucyArPSBjW29yZFtrXV0gLSBzdWI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvdXQgPDwgYW5zJTEwMDAwMDAwMDcgPDwgJ1xuJzsKICAgIH0KfQ==