#include <bits/stdc++.h>
using namespace std;
int n, k, p, x, ide, ido, odd[100100], even[100100];
vector<int> seteven[100100], setodd[100100];
int main() {
  scanf("%d %d %d", &n, &k, &p);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x % 2 == 0)
      even[++ide] = x;
    else
      odd[++ido] = x;
  }
  if (ido < k - p)
    printf("NO\n");
  else {
    for (int i = 1; i <= k - p; i++) setodd[i].push_back(odd[ido - i + 1]);
    int tmp = (p < ide) ? p : ide;
    for (int i = 1; i <= tmp; i++) seteven[i].push_back(even[ide - i + 1]);
    ido -= k - p;
    if (ide < p && ido / 2 + ide >= p) {
      for (int i = ide + 1; i <= p; i++) {
        seteven[i].push_back(odd[ido]);
        seteven[i].push_back(odd[ido - 1]);
        ido -= 2;
      }
    } else if (ide < p && ido / 2 + ide < p) {
      printf("NO\n");
      return 0;
    } else if (ide > p) {
      if (p > 0)
        for (int i = 1; i <= ide - p; i++) seteven[1].push_back(even[i]);
      else
        for (int i = 1; i <= ide - p; i++) setodd[1].push_back(even[i]);
    }
    if (ido > 0 && ido % 2 == 1) {
      printf("NO\n");
      return 0;
    } else if (ido > 0 && ido % 2 == 0) {
      if (k - p > 0)
        for (int i = 1; i <= ido; i++) setodd[1].push_back(odd[i]);
      else
        for (int i = 1; i <= ido; i++) seteven[1].push_back(odd[i]);
    }
    printf("YES\n");
    for (int i = 1; i <= p; i++) {
      printf("%d ", (int)seteven[i].size());
      for (int j = 0; j < (int)seteven[i].size(); j++) {
        printf("%d", seteven[i][j]);
        if (j < (int)seteven[i].size() - 1)
          printf(" ");
        else
          printf("\n");
      }
    }
    for (int i = 1; i <= k - p; i++) {
      printf("%d ", (int)setodd[i].size());
      for (int j = 0; j < (int)setodd[i].size(); j++) {
        printf("%d", setodd[i][j]);
        if (j < (int)setodd[i].size() - 1)
          printf(" ");
        else
          printf("\n");
      }
    }
  }
}
