#include <bits/stdc++.h>
using namespace std;
vector<long long> a[3];
int main() {
  int n, k, p;
  scanf("%d%d%d", &n, &k, &p);
  for (int i = 0; i < n; i++) {
    long long x;
    cin >> x;
    a[x % 2].push_back(x);
  }
  int l = k - p;
  int cp = a[1].size() - l;
  if (cp < 0 || cp % 2 == 1 || cp / 2 + a[0].size() < p) {
    printf("NO\n");
    return 0;
  } else {
    printf("YES\n");
  }
  int ps = 0;
  if (p) {
    for (int i = 0; i < l; i++, ps++) {
      printf("1 %d\n", a[1][ps]);
    }
    for (int i = 0; i < cp; i++, ps++) {
      a[0].push_back(a[1][ps]);
    }
  } else {
    printf("%d", a[1].size() - l + 1 + a[0].size());
    for (int i = 0; i < a[1].size() - l + 1; i++, ps++) {
      printf(" %d", a[1][ps]);
    }
    for (int i = 0; i < a[0].size(); i++) {
      printf(" %d", a[0][i]);
    }
    putchar(10);
    for (int i = 1; i < l; i++, ps++) {
      printf("1 %d\n", a[1][ps]);
    }
    return 0;
  }
  ps = 0;
  for (int i = 0; i < p - 1; i++) {
    if (a[0][ps] % 2 == 0)
      printf("1 %I64d\n", a[0][ps++]);
    else {
      printf("2 %I64d %I64d\n", a[0][ps], a[0][ps + 1]);
      ps += 2;
    }
  }
  int m = a[0].size();
  if (m - ps != 0) {
    printf("%I64d", (long long)m - ps);
    for (; ps < a[0].size(); ps++) {
      printf(" %I64d", a[0][ps]);
    }
    putchar(10);
  }
  return 0;
}
