#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 * 1000 + 10;
int N, K, P;
int A[MAXN];
void Read() {
  scanf("%d %d %d", &N, &K, &P);
  for (long long i = (1); i <= (long long)(N); ++i) {
    scanf("%d", &A[i]);
  }
}
bool Solve() {
  vector<int> odd, even;
  for (long long i = (1); i <= (long long)(N); ++i) {
    if (A[i] & 1) {
      odd.push_back(A[i]);
    } else {
      even.push_back(A[i]);
    }
  }
  int L = K - P;
  if (((odd).size()) < L) {
    return false;
  }
  int left = ((odd).size()) - L;
  if (left & 1) {
    return false;
  }
  if (left / 2 + ((even).size()) < P) {
    return false;
  }
  puts("YES");
  int p = 0;
  vector<vector<int> > ans;
  for (long long i = (1); i <= (long long)(L); ++i) {
    ans.push_back(vector<int>(1, odd[p++]));
  }
  int e = 0;
  for (long long i = (1); i <= (long long)(P); ++i) {
    if (p < ((odd).size())) {
      vector<int> t;
      t.push_back(odd[p]);
      t.push_back(odd[p + 1]);
      p += 2;
      ans.push_back(t);
    } else {
      ans.push_back(vector<int>(1, even[e++]));
    }
  }
  vector<int> v = ans.back();
  ans.pop_back();
  while (e < ((even).size())) {
    v.push_back(even[e++]);
  }
  while (p < ((odd).size())) {
    v.push_back(odd[p++]);
  }
  ans.push_back(v);
  for (long long i = (0); i <= (long long)(K - 1); ++i) {
    int n = ((ans[i]).size());
    printf("%d", n);
    for (long long j = (0); j <= (long long)(n - 1); ++j) {
      printf(" %d", ans[i][j]);
    }
    printf("\n");
  }
  return true;
}
int main() {
  Read();
  if (!Solve()) {
    puts("NO");
  }
  return 0;
}
