#include <utility>
#include <set>
#include <map>
#include <string>
#include <chrono>
#include <vector>
#include <algorithm>
#include <random>
#include <complex>
#include <iostream>
#include <fstream>
#include <bitset>
#include <tuple>
#include <queue>
#include <cassert>
#include <iomanip>
#include <unordered_set>
#include <functional>
#include <climits>


using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;

using namespace std;

int hbit(int x) {
    for (int i = 31; i >= 0; i--) {
        if ((1 << i) & x) return i + 1;
    }
    return 0;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
 #ifndef ONLINE_JUDGE
    ifstream cin("input.txt");
    ofstream cout("output.txt");
#endif

    int t;
    cin >> t;
    while (t--) {
        int n, k;
        string s;
        cin >> n >> k >> s;
        int lg = hbit(n);
        string t(max(0, k - lg), '0');
        int l = k - t.length();
        int mask = 0, cnt = 0;
        for (int i = 0; i < k - l; ++i) {
            cnt += s[i] - '0';
        }
        for (int i = k - l; i < k - 1; ++i) {
            mask = (mask << 1) | (s[i] - '0');
        }
        vector<bool> bad(1 << l);
        for (int i = k - 1; i < n; ++i) {
            mask = ((mask << 1) | (s[i] - '0')) & ((1 << l) - 1);
            if (cnt == k - l) {
                bad[((1 << l) - 1) ^ mask] = true;
            }
            cnt = cnt - (s[i - k + 1] - '0') + (s[i - l + 1] - '0');
        }
        int ans = 0;
        while (ans < (1 << l) && bad[ans]) {
            ++ans;
        }
        if (ans == (1 << l)) {
            cout << "NO\n";
            continue;
        }
        for (int i = l - 1; i >= 0; --i) {
            t += '0' + (ans >> i & 1);
        }
        cout << "YES\n";
        cout << t << "\n";
    }
    return 0;
}