//#pragma GCC optimize("O3,unroll-loops")
///#pragma GCC optimize("Ofast")
#include <vector>
//#pragma GCC target("avx2")
#include <bits/stdc++.h>

using namespace std;

#define int long long
using ld = long double;

mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());

int mod = 998244353;

int binpow(int x, int n) {
    if (n == 0) {
        return 1;
    }
    if (n % 2 == 0) {
        return binpow(x*x%mod, n/2);
    }
    return binpow(x*x%mod, n/2) * x % mod;
}

struct Node {
    int x;
};

const int MAXN = 5 * 1e5;
vector <int> segtree(MAXN*4, -1);
vector <int> sum_push(MAXN*4, 0);
vector <int> dp(MAXN, -1);

int mergeupd(int ansl, int ansr) {
    return max(ansl, ansr);
}

int mergeget(int g1, int g2) {
    return max(g1, g2);
}

void push(int v) {
    segtree[v*2+1] += sum_push[v];
    segtree[v*2+2] += sum_push[v];
    sum_push[v*2+1] += sum_push[v];
    sum_push[v*2+2] += sum_push[v];
    sum_push[v] = 0;
}

void build(int v, int l, int r) {
    if (r - l == 1) {
        segtree[v] = dp[l];
        return;
    }
    int mid = (r+l)/2;
    build(v*2+1, l, mid);
    build(v*2+2, mid, r);
    segtree[v] = mergeupd(segtree[v*2+1], segtree[v*2+2]);
}

void update(int ql, int qr, int x, int v, int l, int r) {
    if (ql <= l && r <= qr) {
        segtree[v] += x;
        sum_push[v] += x;
        return;
    }
    if (qr <= l || r <= ql) {
        return;
    }
    int mid = (r+l)/2;
    push(v);
    update(ql, qr, x, v*2+1, l, mid);
    update(ql, qr, x, v*2+2, mid, r);
    segtree[v] = mergeupd(segtree[v*2+1], segtree[v*2+2]);
}

int get(int ql, int qr, int v, int l, int r) {
    if (ql <= l && r <= qr) {
        return segtree[v];
    }
    if (qr <= l || r <= ql) {
        return -1;
    }
    int mid = (r+l)/2;
    push(v);
    auto g1 = get(ql, qr, v*2+1, l, mid);
    auto g2 = get(ql, qr, v*2+2, mid, r);
    return mergeget(g1, g2);
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    int n, m;
    int t;
    cin >> t;
    cin >> n >> m;
    vector <int> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    string s;
    cin >> s;
    if (m % 2 == 0) {
        cout << "No";
        return 0;
    }
    cout << "Yes";
    cout << '\n';
    if (t >= 2) {
        cout << m/2 << '\n';
    }
    if (t == 3) {
        cout << 1 << '\n';
        cout << m/2+1 << " " << m/2+1;
    }
}
