#include <bits/stdc++.h>
using namespace std;
int n, k, p, ai;
int ei, oi;
int last_odd_i = -1;
int last_odd_oi = -1;
int last_served_odd = -1;
vector<int> even[100005];
vector<int> odd[100005];
int main() {
  cin >> n >> k >> p;
  for (int i = 0; i < n; ++i) {
    cin >> ai;
    if (ai % 2) {
      if (last_odd_i >= 0) {
        even[last_odd_i].push_back(ai);
        last_odd_i = -1;
      } else {
        if (k - p == 0 || (last_served_odd == k - p - 1)) {
          if (p == 0) {
            odd[oi].push_back(ai);
            last_odd_oi = (last_odd_oi >= 0) ? -1 : oi;
          } else {
            even[ei].push_back(ai);
            last_odd_i = ei;
            if (ei < p - 1) ++ei;
          }
        } else {
          odd[oi].push_back(ai);
          last_served_odd = oi;
          if (oi < k - p - 1) ++oi;
        }
      }
    } else {
      if (p == 0) {
        odd[oi].push_back(ai);
      } else {
        even[ei].push_back(ai);
        if (ei < p - 1) ++ei;
      }
    }
  }
  if ((p == 0 || (ei == p - 1 && even[ei].size() > 0)) &&
      (k - p == 0 || (oi == k - p - 1 && last_served_odd == oi)) &&
      last_odd_i < 0 && last_odd_oi < 0) {
    cout << "YES" << endl;
    for (int i = 0; i < p; ++i) {
      cout << even[i].size();
      for (size_t j = 0; j < even[i].size(); ++j) cout << " " << even[i][j];
      if (i < p - 1) cout << endl;
    }
    if (k - p > 0 && p > 0) cout << endl;
    for (int i = 0; i < k - p; ++i) {
      cout << odd[i].size();
      for (size_t j = 0; j < odd[i].size(); ++j) cout << " " << odd[i][j];
      if (i < k - p - 1) cout << endl;
    }
  } else
    cout << "NO";
  return 0;
}
