#include <bits/stdc++.h>
using namespace std;
long long n, k, p, a, u = 0, idx1 = 0, idx2 = 0;
vector<long long> v1, v2;
void M() {
  printf("%I64d ", v1.size() + v2.size() - idx1 - idx2);
  for (long long i = idx1; i < v1.size(); i++) {
    printf("%I64d ", v1[i]);
  }
  for (long long i = idx2; i < v2.size(); i++) {
    printf("%I64d ", v2[i]);
  }
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &k, &p);
  k -= p;
  for (long long i = 0; i < n; i++) {
    scanf("%I64d", &a);
    if (a % 2 == 0) {
      v2.push_back(a);
    } else {
      v1.push_back(a);
    }
  }
  if (v1.size() < k) {
    printf("NO");
    return 0;
  }
  if (v2.size() + (v1.size() - k) / 2 < p) {
    printf("NO");
    return 0;
  }
  if ((v1.size() - k) % 2 == 1) {
    printf("NO");
    return 0;
  }
  printf("YES\n");
  long long q = k + p;
  for (long long i = 0; i < k; i++) {
    if (u == q - 1) {
      M();
      return 0;
    }
    printf("1 %I64d\n", v1[i]);
    u++;
    idx1++;
  }
  for (long long i = 0; i < p; i++) {
    if (u == q - 1) {
      M();
      return 0;
    }
    if (v1.size() >= idx1 + 2) {
      printf("2 %I64d %I64d\n", v1[idx1], v1[idx1 + 1]);
      idx1 += 2;
    } else {
      printf("1 %I64d\n", v2[idx2]);
      idx2++;
    }
    u++;
  }
}
