#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, p, k;
  cin >> n >> k >> p;
  vector<long long> even;
  vector<long long> odd;
  for (int i = 0; i < n; ++i) {
    long long tmp;
    cin >> tmp;
    if (tmp % 2)
      odd.push_back(tmp);
    else
      even.push_back(tmp);
  }
  if (odd.size() < k - p || (odd.size() - (k - p)) % 2 == 1) {
    cout << "NO" << endl;
    return 0;
  }
  if (even.size() + (odd.size() - (k - p)) / 2 < p) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  if (p == 0) {
    for (int i = 0; i < k - p - 1; ++i) {
      cout << "1 " << odd[odd.size() - 1] << endl;
      odd.pop_back();
    }
    cout << odd.size() + even.size();
    for (int i = 0; i < odd.size(); ++i) {
      cout << " " << odd[i];
    }
    for (int i = 0; i < even.size(); ++i) {
      cout << " " << even[i];
    }
    return 0;
  }
  for (int i = 0; i < k - p; ++i) {
    cout << "1 " << odd[odd.size() - 1] << endl;
    odd.pop_back();
  }
  for (int i = 0; i < p - 1; ++i) {
    if (even.size() > 0) {
      cout << "1 " << even[even.size() - 1] << endl;
      even.pop_back();
    } else {
      cout << "2 " << odd[odd.size() - 1] << " " << odd[odd.size() - 2] << endl;
      odd.pop_back();
      odd.pop_back();
    }
  }
  if (odd.size() + even.size() == 0) return 0;
  cout << odd.size() + even.size();
  for (int i = 0; i < odd.size(); ++i) {
    cout << " " << odd[i];
  }
  for (int i = 0; i < even.size(); ++i) {
    cout << " " << even[i];
  }
}
