#include <bits/stdc++.h>
using namespace std;
const int maxn = 111111;
const int maxm = 111111;
int n, kk, p;
vector<long long> a[111111];
long long b[111111];
vector<long long> even, odd;
void slove() {
  even.clear();
  odd.clear();
  for (int i = 0; i < kk; i++) a[i].clear();
  for (int i = 0; i < n; i++) {
    scanf("%I64d", &b[i]);
    if (b[i] & 1)
      odd.push_back(b[i]);
    else
      even.push_back(b[i]);
  }
  int len = even.size();
  int le = odd.size();
  int i, j, k;
  for (i = 0, j = 0, k = 0; i < p; i++) {
    if (j != len) {
      a[i].push_back(even[j++]);
      continue;
    }
    if (k < le - 1) {
      a[i].push_back(odd[k++]);
      a[i].push_back(odd[k++]);
      continue;
    }
    break;
  }
  if (i != p) {
    puts("NO");
    return;
  }
  for (; i < kk; i++) {
    if (k != le) {
      a[i].push_back(odd[k++]);
      continue;
    }
    break;
  }
  if (i != kk) {
    puts("NO");
    return;
  }
  if ((le - k) & 1) {
    puts("NO");
    return;
  }
  while (j < len) {
    a[0].push_back(even[j++]);
  }
  while (k < le) {
    a[0].push_back(odd[k++]);
  }
  puts("YES");
  for (i = 0; i < kk; i++) {
    printf("%d", a[i].size());
    for (j = 0; j < a[i].size(); j++) printf(" %I64d", a[i][j]);
    puts("");
  }
}
int main() {
  int t;
  while (~scanf("%d%d%d", &n, &kk, &p)) {
    slove();
  }
  return 0;
}
