#include <bits/stdc++.h>
using namespace std;
queue<int> odds, evens;
vector<vector<int> > groups;
void imp() {
  printf("NO\n");
  exit(0);
}
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  int even = p, odd = k - p;
  int a;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a);
    if (a % 2 == 0)
      evens.push(a);
    else
      odds.push(a);
  }
  while (even--) {
    if (evens.size() > 0) {
      groups.push_back(vector<int>());
      groups.back().push_back(evens.front());
      evens.pop();
    } else if (odds.size() >= 2) {
      groups.push_back(vector<int>());
      groups.back().push_back(odds.front());
      odds.pop();
      groups.back().push_back(odds.front());
      odds.pop();
    } else
      imp();
  }
  while (odd--) {
    if (odds.size() == 0) imp();
    groups.push_back(vector<int>());
    groups.back().push_back(odds.front());
    odds.pop();
  }
  while (evens.size() && p > 0) {
    groups[0].push_back(evens.front());
    evens.pop();
  }
  while (evens.size() && k - p > 0) {
    groups.back().push_back(evens.front());
    evens.pop();
  }
  if (odds.size() % 2 == 0) {
    while (odds.size() && k - p > 0) {
      groups.back().push_back(odds.front());
      odds.pop();
    }
  }
  if (odds.size() && p > 0 && odds.size() % 2 == 0) {
    while (odds.size()) {
      groups[0].push_back(odds.front());
      odds.pop();
    }
  }
  if (evens.size() || odds.size()) imp();
  printf("YES\n");
  for (int i = 0; i < (int)groups.size(); i++) {
    int sz = groups[i].size();
    printf("%d ", sz);
    for (int j = 0; j < sz; j++) printf("%d ", groups[i][j]);
    printf("\n");
  }
}
