#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> ans[N];
int a[N], b[N], c[N];
int n, k, p;
int main() {
  scanf("%d%d%d", &n, &k, &p);
  int s = 0;
  int _x = 0, _y = 0;
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
    s += a[i];
    if (a[i] & 1)
      b[_x++] = a[i];
    else
      c[_y++] = a[i];
  }
  if ((k - p) & 1) {
    if (s % 2 == 0) {
      printf("NO\n");
      return 0;
    }
  }
  if ((k - p) % 2 == 0) {
    if (s & 1) {
      printf("NO\n");
      return 0;
    }
  }
  int j = 0;
  if (_y >= p) {
    for (int i = 0; i < p; ++i) {
      ans[j++].push_back(c[i]);
    }
    if (_x < (k - p)) {
      printf("NO\n");
      return 0;
    } else {
      for (int i = 0; i < k - p; ++i) {
        ans[j++].push_back(b[i]);
      }
      for (int i = p; i < _y; ++i) ans[j - 1].push_back(c[i]);
      for (int i = k - p; i < _x; ++i) ans[j - 1].push_back(b[i]);
    }
  } else {
    for (int i = 0; i < _y; ++i) {
      ans[j++].push_back(c[i]);
    }
    if (_x / 2 < (p - _y)) {
      printf("NO\n");
      return 0;
    }
    for (int i = 0; i < p - _y; ++i) {
      ans[j].push_back(b[i * 2]);
      ans[j++].push_back(b[i << 1 | 1]);
    }
    if ((_x - (p - _y) * 2) < (k - p)) {
      printf("NO\n");
      return 0;
    } else {
      for (int i = 2 * (p - _y); i < (2 * (p - _y) + k - p); ++i) {
        ans[j++].push_back(b[i]);
      }
      for (int i = (2 * (p - _y) + k - p); i < _x; ++i)
        ans[j - 1].push_back(b[i]);
    }
  }
  printf("YES\n");
  for (int i = 0; i < j; ++i) {
    int n = ans[i].size();
    printf("%d ", n);
    for (int k = 0; k < n; ++k) {
      printf("%d ", ans[i][k]);
    }
    printf("\n");
  }
  return 0;
}
