#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
vector<int> v[maxn], u[maxn];
int a[maxn];
bool mark[maxn];
void fin() {
  cout << "NO" << endl;
  exit(0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, o, e;
  cin >> n >> o >> e;
  for (int i = 0; i < n; i++) cin >> a[i];
  o -= e;
  int sm2 = 0;
  for (int i = 0; i < n; i++) sm2 = (sm2 + a[i]) % 2;
  if (o % 2 != sm2) fin();
  int cm2 = 0;
  for (int i = 0; i < n; i++) cm2 += (a[i] % 2);
  if (cm2 < o) fin();
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (a[i] % 2 == 1 && cnt < o) mark[i] = true, v[cnt++].push_back(a[i]);
  cnt = 0;
  for (int i = 0; i < n; i++)
    if (a[i] % 2 == 0 && cnt < e) mark[i] = true, u[cnt++].push_back(a[i]);
  if (cnt < e) {
    int tmp = -1;
    for (int i = 0; i < n; i++)
      if (a[i] % 2 == 1 && !mark[i] && cnt < e) {
        if (tmp == -1)
          tmp = i;
        else {
          mark[tmp] = mark[i] = true;
          u[cnt].push_back(a[tmp]);
          u[cnt++].push_back(a[i]);
          tmp = -1;
        }
      }
  }
  if (cnt < e) fin();
  for (int i = 0; i < n; i++)
    if (!mark[i]) {
      if (o > 0)
        v[0].push_back(a[i]);
      else
        u[0].push_back(a[i]);
    }
  cout << "YES" << endl;
  for (int i = 0; i < o; i++) {
    cout << v[i].size() << " ";
    for (int j = 0; j < v[i].size(); j++) cout << v[i][j] << " ";
    cout << '\n';
  }
  for (int i = 0; i < e; i++) {
    cout << u[i].size() << " ";
    for (int j = 0; j < u[i].size(); j++) cout << u[i][j] << " ";
    cout << '\n';
  }
  return 0;
}
