#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int v[N];
int main() {
  int n, oo = 0, ee = 0;
  int k, p;
  scanf("%d%d%d", &n, &k, &p);
  vector<int> o;
  vector<int> e;
  for (int i = 0; i < n; i++) {
    scanf("%d", &v[i]);
    if (v[i] & 1) {
      oo++;
      o.push_back(v[i]);
    } else {
      ee++;
      e.push_back(v[i]);
    }
  }
  if (oo < k - p || (oo - (k - p)) % 2) {
    puts("NO");
    return 0;
  }
  ee += (oo - (k - p)) / 2;
  if (ee < p) {
    puts("NO");
    return 0;
  }
  puts("YES");
  vector<vector<int> > ans;
  ans.resize(k);
  int even = 0, odd = 0;
  for (int i = 0; i < p; i++) {
    if (even < e.size()) {
      ans[i].push_back(e[even]);
      even++;
    } else {
      ans[i].push_back(o[odd]);
      odd++;
      ans[i].push_back(o[odd]);
      odd++;
    }
  }
  for (int i = p; i < k; i++) {
    ans[i].push_back(o[odd]);
    odd++;
  }
  while (odd < o.size()) {
    ans[0].push_back(o[odd]);
    odd++;
  }
  while (even < e.size()) {
    ans[0].push_back(e[even]);
    even++;
  }
  for (int i = 0; i < k; i++) {
    printf("%d ", ans[i].size());
    for (int j = 0; j < ans[i].size(); j++) {
      printf("%d ", ans[i][j]);
    }
    puts("");
  }
  return 0;
}
