#include <bits/stdc++.h>
using namespace std;
long long S;
int n, k, p, odd, cnt = 1;
int a[100005], used[100005];
queue<int> q[100005];
int main() {
  cin >> n >> k >> p;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    odd += a[i] % 2;
    S += a[i];
  }
  if (k - p > odd || (odd - (k - p)) % 2 == 1 ||
      (odd - (k - p)) / 2 + n - odd < p) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  int c = k - p;
  for (int i = 1; i <= n; i++) {
    if (c == 0) break;
    if (a[i] % 2 == 1) {
      c--;
      used[i] = 1;
      q[cnt].push(a[i]);
      cnt++;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (p == 0) break;
    if (a[i] % 2 == 0) {
      p--;
      used[i] = 1;
      q[cnt].push(a[i]);
      cnt++;
    }
  }
  if (p) {
    int l = 0;
    for (int i = 1; i <= n; i++) {
      if (p == 0) break;
      if (a[i] % 2 == 1 && !used[i]) {
        q[cnt].push(a[i]);
        used[i] = 1;
        l++;
      }
      if (l == 2) {
        l = 0;
        p--;
        cnt++;
      }
    }
  }
  for (int i = 1; i <= n; i++)
    if (!used[i]) q[k].push(a[i]);
  for (int i = 1; i <= k; i++) {
    cout << q[i].size() << " ";
    while (!q[i].empty()) {
      cout << q[i].front() << " ";
      q[i].pop();
    }
    cout << "\n";
  }
  return 0;
}
