#include <bits/stdc++.h>
using namespace std;
bool comp(pair<int, int> a, pair<int, int> b) { return a.first < b.first; }
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  vector<int> tabo(0);
  vector<int> tabe(0);
  for (int i = int(0); i < int(n); ++i) {
    int tmp;
    cin >> tmp;
    if (tmp % 2 == 1)
      tabo.push_back(tmp);
    else
      tabe.push_back(tmp);
  }
  int cptodd = tabo.size();
  int cpteven = tabe.size();
  int rem = cptodd - (k - p);
  rem /= 2;
  if ((cptodd % 2 != (k - p) % 2) || (cptodd < k - p) ||
      ((n - cptodd + rem) < p)) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  vector<vector<int> > oddtab(k - p, vector<int>(0));
  vector<vector<int> > eventab(p, vector<int>(0));
  int inde = 0, indo = 0;
  for (; indo < k - p; indo++) oddtab[indo].push_back(tabo[indo]);
  for (int i = int(0); i < int(p); ++i) {
    if (indo != cptodd) {
      eventab[i].push_back(tabo[indo++]);
      assert(indo != cptodd);
      eventab[i].push_back(tabo[indo++]);
    } else {
      assert(inde != cpteven);
      eventab[i].push_back(tabe[inde++]);
    }
  }
  vector<vector<int> > &tabref = ((p == 0) ? oddtab : eventab);
  for (; indo != cptodd; indo++) tabref[0].push_back(tabo[indo]);
  for (; inde != cpteven; inde++) tabref[0].push_back(tabe[inde]);
  for (int i = int(0); i < int(p); ++i) {
    cout << eventab[i].size() << " ";
    for (int j = int(0); j < int(eventab[i].size()); ++j)
      cout << eventab[i][j] << " ";
    cout << endl;
  }
  for (int i = int(0); i < int(k - p); ++i) {
    cout << oddtab[i].size() << " ";
    for (int j = int(0); j < int(oddtab[i].size()); ++j)
      cout << oddtab[i][j] << " ";
    cout << endl;
  }
  return 0;
}
