#include <bits/stdc++.h>
using namespace std;
int main() {
  queue<int> ji_dl, ou_dl;
  while (!ji_dl.empty()) ji_dl.pop();
  while (!ou_dl.empty()) ou_dl.pop();
  int n, k, p;
  scanf("%d%d%d", &n, &k, &p);
  for (int i = 0; i < n; i++) {
    int a;
    scanf("%d", &a);
    if (a % 2 == 1)
      ji_dl.push(a);
    else
      ou_dl.push(a);
  }
  int x1 = ji_dl.size(), x2 = ou_dl.size(), x3 = x1 - k + p, count = 0;
  if (x3 < 0 || x3 % 2 == 1 || (x2 < p && (x3 / 2 < p - x2)))
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 0; i < k - p; i++) {
      if (count == k - 1) break;
      printf("1 %d\n", ji_dl.front());
      ji_dl.pop();
      count++;
    }
    while (!ji_dl.empty()) {
      if (count == k - 1) break;
      printf("2 %d ", ji_dl.front());
      ji_dl.pop();
      printf("%d\n", ji_dl.front());
      ji_dl.pop();
      count++;
    }
    while (!ou_dl.empty()) {
      if (count == k - 1) break;
      printf("1 %d\n", ou_dl.front());
      ou_dl.pop();
      count++;
    }
    printf("%d", ji_dl.size() + ou_dl.size());
    while (!ji_dl.empty()) {
      printf(" %d", ji_dl.front());
      ji_dl.pop();
    }
    while (!ou_dl.empty()) {
      printf(" %d", ou_dl.front());
      ou_dl.pop();
    }
    printf("\n");
  }
  return 0;
}
