#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-8;
const int INF = (int)(INT_MAX - 100);
const long long mod = (int)(1e+9 + 7);
const int N = (int)(0);
int days_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  int num;
  vector<int> pars;
  vector<int> imps;
  for (int i = 0; i < n; i++) {
    scanf("%d", &num);
    if (num & 1)
      imps.push_back(num);
    else
      pars.push_back(num);
  }
  int tamp = int(pars.size());
  int tami = int(imps.size());
  if (k == 0 && p == 0) return cout << "NO", 0;
  ;
  if (tami < k - p) return cout << "NO", 0;
  ;
  if ((tami - k + p) & 1) return cout << "NO", 0;
  ;
  vector<int> grp[p];
  vector<int> gri[k - p];
  int iti = 0;
  for (; iti < k - p; iti++) gri[iti].push_back(imps[iti]);
  int itgp = 0;
  int itgi = 0;
  for (; iti < tami; iti += 2) {
    if (p == 0) {
      gri[itgi].push_back(imps[iti]);
      gri[itgi].push_back(imps[iti + 1]);
      itgi = (itgi + 1) % (k - p);
    } else {
      grp[itgp].push_back(imps[iti]);
      grp[itgp].push_back(imps[iti + 1]);
      itgp = (itgp + 1) % p;
    }
  }
  for (int itp = 0; itp < tamp; itp++) {
    if (p == 0) {
      gri[itgi].push_back(pars[itp]);
      itgi = (itgi + 1) % (k - p);
    } else {
      grp[itgp].push_back(pars[itp]);
      itgp = (itgp + 1) % p;
    }
  }
  for (int i = 0; i < p; i++)
    if (int(grp[i].size()) == 0) return cout << "NO", 0;
  ;
  cout << "YES\n";
  for (int itgp = 0; itgp < p; itgp++) {
    printf("%d ", int(grp[itgp].size()));
    for (int x : grp[itgp]) printf("%d ", x);
    printf("\n");
  }
  for (int itgi = 0; itgi < k - p; itgi++) {
    printf("%d ", int(gri[itgi].size()));
    for (int x : gri[itgi]) printf("%d ", x);
    printf("\n");
  }
  return 0;
}
