#include <bits/stdc++.h>
using namespace std;
struct node {
  int n;
  int d;
} nodes[100100];
bool cmp(node a, node b) { return a.d > b.d; }
int n, k, p;
int main() {
  while (~scanf("%d%d%d", &n, &k, &p)) {
    int even = 0;
    for (int i = 0; i < n; i++) {
      scanf("%d", &nodes[i].n);
      nodes[i].d = nodes[i].n % 2;
      if (nodes[i].d == 0) even++;
    }
    int restOdd = n - even - (k - p);
    if (restOdd < 0)
      printf("NO\n");
    else if (restOdd % 2 == 1)
      printf("NO\n");
    else if (restOdd / 2 + even < p)
      printf("NO\n");
    else {
      sort(nodes, nodes + n, cmp);
      printf("YES\n");
      if (p == 0) {
        for (int i = 0; i < k - p - 1; i++) printf("%d %d\n", 1, nodes[i].n);
        printf("%d", n - (k - p - 1));
        for (int i = k - p - 1; i < n; i++) printf(" %d", nodes[i].n);
        printf("\n");
      } else {
        for (int i = 0; i < k - p; i++) printf("%d %d\n", 1, nodes[i].n);
        int i, ct;
        for (ct = 0, i = k - p; ct < p - 1; i++, ct++) {
          if (nodes[i].d == 1) {
            printf("%d %d %d\n", 2, nodes[i].n, nodes[i + 1].n);
            i++;
          } else
            printf("%d %d\n", 1, nodes[i].n);
        }
        printf("%d", n - i);
        for (; i < n; i++) {
          printf(" %d", nodes[i].n);
        }
        printf("\n");
      }
    }
  }
  return 0;
}
