#include <bits/stdc++.h>
const long long mod = 1e9 + 7;
const long long MAX = INT_MAX;
const long long inf = 1e18 + 5;
const double pi = 3.14159265358979323846;
long long dirX[] = {1, -1, 0, 0};
long long dirY[] = {0, 0, 1, -1};
using namespace std;
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  long long k;
  cin >> k;
  long long p;
  cin >> p;
  vector<long long> ans[k];
  vector<long long> even;
  vector<long long> odd;
  for (long long i = 0; i < n; i++) {
    long long t;
    cin >> t;
    if (t & 1) {
      odd.push_back(t);
    } else {
      even.push_back(t);
    }
  }
  long long od = k - p;
  if (od > odd.size()) {
    cout << "NO"
         << "\n";
    return 0;
  }
  bool flag = true;
  long long o = 0, e = 0;
  long long I = 0;
  for (long long i = 0; i < od; i++) {
    ans[I++].push_back(odd[o]);
    o++;
  }
  long long rem = odd.size() - o;
  if (rem & 1) {
    cout << "NO"
         << "\n";
    return 0;
  }
  for (long long i = 0; i < p; i++) {
    if (e < even.size()) {
      ans[I++].push_back(even[e++]);
    } else {
      if (rem < 2) {
        flag = false;
        break;
      }
      ans[I].push_back(odd[o++]);
      ans[I++].push_back(odd[o++]);
      rem -= 2;
    }
  }
  while (e < even.size()) {
    ans[k - 1].push_back(even[e++]);
  }
  while (o < odd.size()) {
    ans[k - 1].push_back(odd[o++]);
  }
  if (!flag)
    cout << "NO"
         << "\n";
  else {
    cout << "YES"
         << "\n";
    for (long long i = 0; i < k; i++) {
      cout << ans[i].size() << " ";
      for (auto it : ans[i]) cout << it << " ";
      cout << "\n";
    }
  }
  return 0;
}
