#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  vector<int> a[2];
  for (int i = int(0); i < int(n); ++i) {
    int cur;
    cin >> cur;
    a[cur % 2].push_back(cur);
  }
  if (int((a[1]).size()) < k - p) {
    puts("NO");
    exit(0);
  }
  vector<vector<int> > ans(k);
  for (int i = int(0); i < int(k - p); ++i) {
    ans[i].push_back(a[1].back());
    a[1].pop_back();
  }
  if (int((a[1]).size()) % 2 != 0) {
    puts("NO");
    exit(0);
  }
  if (int((a[0]).size()) + int((a[1]).size()) / 2 < p) {
    puts("NO");
    exit(0);
  }
  for (int i = int(k - p); i < int(k); ++i) {
    if (!a[0].empty()) {
      ans[i].push_back(a[0].back());
      a[0].pop_back();
    } else {
      for (int step = int(0); step < int(2); ++step) {
        ans[i].push_back(a[1].back());
        a[1].pop_back();
      }
    }
  }
  for (int j = int(0); j < int(2); ++j) {
    for (int i = int(0); i < int(int((a[j]).size())); ++i) {
      ans[0].push_back(a[j][i]);
    }
  }
  puts("YES");
  for (int i = int(0); i < int(int((ans).size())); ++i) {
    printf("%d", int((ans[i]).size()));
    for (int j = int(0); j < int(int((ans[i]).size())); ++j) {
      printf(" %d", ans[i][j]);
    }
    puts("");
  }
  return 0;
}
