#include <bits/stdc++.h>
using namespace std;
int cal(int n) {
  int ans = 1;
  for (int i = 2; i <= n; i++) ans += i;
  return ans;
}
int comb(int n, int r) {
  if (n < r) return 0;
  if (r > n - r) r = n - r;
  int ans = 1;
  for (int i = 0; i < r; i++) {
    ans *= (n - i);
    ans /= (i + 1);
  }
  return ans;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int findlcm(int arr[], int n) {
  int ans = arr[0];
  for (int i = 1; i < n; i++) ans = (((arr[i])) / (gcd(arr[i], ans))) * ans;
  return ans;
}
int power(int n, int x = 2) {
  int result = 1;
  while (n) {
    if (n & 1) result = result * x % (1000000007);
    n = n / 2;
    x = x * x % (100000007);
  }
  return result;
}
signed main() {
  int t = 1;
  while (t--) {
    int n, k, eve;
    cin >> n >> k >> eve;
    int* a = new int[n];
    for (int i = 0; i < n; i++) cin >> a[i];
    int given = k - eve;
    int odd = 0;
    vector<int> vodd;
    vector<int> even;
    for (int i = 0; i < n; i++) {
      if (a[i] % 2)
        odd++, vodd.push_back(i);
      else
        even.push_back(i);
    }
    if (given % 2 == 1) {
      if (odd % 2 == 1 && odd >= given &&
          (even.size() + (odd - given) / 2) >= eve) {
        cout << "YES" << endl;
        for (int i = 0; i < (given - 1); i++) {
          cout << 1 << " " << a[vodd[i]] << endl;
          if (i == (given - 2)) vodd.erase(vodd.begin(), vodd.begin() + i + 1);
        }
        if (eve == 0) {
          cout << vodd.size() + even.size() << " ";
          for (int i = 0; i < vodd.size(); i++) cout << a[vodd[i]] << " ";
          for (int i = 0; i < even.size(); i++) cout << a[even[i]] << " ";
          cout << endl;
        } else {
          if (given != 0) {
            cout << 1 << " " << a[vodd[0]] << endl;
            vodd.erase(vodd.begin());
          }
          if (eve <= even.size()) {
            for (int i = 0; i < eve - 1; i++) {
              cout << 1 << " " << a[even[i]] << endl;
              if (i == (eve - 2)) {
                even.erase(even.begin(), even.begin() + eve - 1);
              }
            }
            cout << even.size() + vodd.size() << " ";
            for (int i = 0; i < even.size(); i++) cout << a[even[i]] << " ";
            for (int i = 0; i < vodd.size(); i++) cout << a[vodd[i]] << " ";
            cout << endl;
          } else {
            for (int i = 0; i < even.size(); i++) {
              cout << 1 << " " << a[even[i]] << endl;
            }
            eve = eve - even.size();
            int w = 0;
            for (int i = 0; i < eve - 1; i++)
              cout << 2 << " " << a[vodd[w++]] << " " << a[vodd[w++]] << endl;
            cout << vodd.size() - w << " ";
            while (w < vodd.size()) cout << a[vodd[w++]] << " ";
            cout << endl;
          }
        }
      } else
        cout << "NO" << endl;
    } else {
      if (odd % 2 == 0 && odd >= given &&
          ((even.size() + (odd - given) / 2) >= eve)) {
        cout << "YES" << endl;
        for (int i = 0; i < given - 1; i++) {
          cout << 1 << " " << a[vodd[i]] << endl;
          if (i == (given - 2)) vodd.erase(vodd.begin(), vodd.begin() + i + 1);
        }
        if (eve == 0) {
          cout << vodd.size() + even.size() << " ";
          for (int i = 0; i < vodd.size(); i++) cout << a[vodd[i]] << " ";
          for (int i = 0; i < even.size(); i++) cout << a[even[i]] << " ";
          cout << endl;
        } else {
          if (given != 0) {
            cout << 1 << " " << a[vodd[0]] << endl;
            vodd.erase(vodd.begin());
          }
          if (eve <= even.size()) {
            for (int i = 0; i < eve - 1; i++) {
              cout << 1 << " " << a[even[i]] << endl;
              if (i == (eve - 2))
                even.erase(even.begin(), even.begin() + eve - 1);
            }
            cout << even.size() + vodd.size() << " ";
            for (int i = 0; i < even.size(); i++) cout << a[even[i]] << " ";
            for (int i = 0; i < vodd.size(); i++) cout << a[vodd[i]] << " ";
            cout << endl;
          } else {
            for (int i = 0; i < even.size(); i++) {
              cout << 1 << " " << a[even[i]] << endl;
            }
            eve = eve - even.size();
            int w = 0;
            for (int i = 0; i < eve - 1; i++)
              cout << 2 << " " << a[vodd[w++]] << " " << a[vodd[w++]] << endl;
            cout << vodd.size() - w << " ";
            while (w < vodd.size()) cout << a[vodd[w++]] << " ";
            cout << endl;
          }
        }
      } else
        cout << "NO" << endl;
    }
  }
}
