#ifndef LOCAL
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include<vector>
#pragma GCC optimize("avx2")
#endif

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

using i128 = __int128;
using ll = long long;
using ld = long double;

template<typename T>
using orderet_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

template<typename T, typename V>
using table = gp_hash_table<T, V>;

const int inf = 2e9 + 7;
const ll INF = 4e18 + 7;
const int maxn = 5e5 + 7;
const int MOD = 998244353;

void solve() {
    int t;
    cin >> t;
    int n, m;
    cin >> n >> m;
    vector<int> v(n);
    for (int i = 0; i < n; ++i) cin >> v[i];
    for (int i = 1; i < n; ++i) {
        if (v[i] % 2 != v[i - 1] % 2) {
            cout << "No\n";
            return;
        }
    }
    cout << "Yes\n";
    if (t >= 2) cout << (m + 1) / 2 << "\n";
    if (t >= 3) cout << "1\n" << (m - 1) / 2 << " " << (m + 1) / 2;
}

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    int t = 1;
    //cin >> t;
    while (t--) solve();
}
