#include <bits/stdc++.h>
using namespace std;
long long big[10000001];
void sieve() {
  fill_n(big, 10000001 - 1, 1);
  for (int i = 1; i < 10000001; ++i)
    if (big[i] == 1)
      for (int j = i; j < 10000001; j += i) big[j] = i;
}
unsigned long long fastExp(int a, unsigned long long b, long long p) {
  long long ans = 1, x = a;
  while (b > 0) {
    if (b % 2 == 1) {
      ans = (ans * x) % p;
    }
    x = (x * x) % p;
    b /= 2;
  }
  return ans % p;
}
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  vector<int> a[2];
  for (int i = 0; i < n; i++) {
    int c;
    cin >> c;
    a[c % 2].push_back(c);
  }
  vector<vector<int> > v(k);
  if (a[1].size() < k - p) {
    cout << "NO";
    return 0;
  }
  for (int i = 0; i < k - p; i++) {
    v[i].push_back(a[1].back());
    a[1].pop_back();
  }
  if (a[1].size() % 2 != 0) {
    cout << "NO";
    return 0;
  }
  if (a[1].size() / 2 + a[0].size() < p) {
    cout << "NO";
    return 0;
  }
  for (int i = k - p; i < k; i++) {
    if (!a[0].empty()) {
      v[i].push_back(a[0].back());
      a[0].pop_back();
    } else {
      v[i].push_back(a[1].back());
      a[1].pop_back();
      v[i].push_back(a[1].back());
      a[1].pop_back();
    }
  }
  while (!a[0].empty()) {
    v[k - 1].push_back(a[0].back());
    a[0].pop_back();
  }
  while (!a[1].empty()) {
    v[k - 1].push_back(a[1].back());
    a[1].pop_back();
    v[k - 1].push_back(a[1].back());
    a[1].pop_back();
  }
  cout << "YES" << endl;
  for (int i = 0; i < k; ++i) {
    cout << v[i].size() << " ";
    for (int j = 0; j < v[i].size(); ++j) {
      cout << v[i][j] << " ";
    }
    cout << endl;
  }
  return 0;
}
