#include <bits/stdc++.h>
using namespace std;
vector<int> a[100005];
int c[100005];
int n, k, p, ans = 0;
bool cmp(int a, int b) { return (a % 2) > (b % 2); }
int main() {
  scanf("%d%d%d", &n, &k, &p);
  p = k - p;
  for (int i = 0; i < n; ++i) {
    scanf("%d", &c[i]);
    ans += c[i] % 2;
  }
  if (ans < p) {
    puts("NO");
    return 0;
  }
  sort(c, c + n, cmp);
  int j = 0;
  for (int i = 0; i < p; ++i) {
    if (c[j] % 2 == 1) {
      a[i].push_back(c[j]);
      j++;
      continue;
    }
    puts("NO");
    return 0;
  }
  for (int i = p; i < k; ++i) {
    if (j >= n) {
      puts("NO");
      return 0;
    }
    if (c[j] % 2 == 0) {
      a[i].push_back(c[j]);
      j++;
      continue;
    }
    if (j + 1 >= n || c[j + 1] % 2 == 0) {
      puts("NO");
      return 0;
    }
    a[i].push_back(c[j]);
    a[i].push_back(c[j + 1]);
    j += 2;
  }
  if (j < n) {
    int ret = 0;
    for (int q = j; q < n; ++q) ret += c[q] % 2;
    if (ret % 2 != 0) {
      puts("NO");
      return 0;
    }
    for (int q = j; q < n; ++q) a[0].push_back(c[q]);
  }
  puts("YES");
  for (int i = 0; i < k; ++i) {
    printf("%d", (int)a[i].size());
    for (int j = 0; j < (int)a[i].size(); ++j) printf(" %d", a[i][j]);
    printf("\n");
  }
  return 0;
}
