#include <bits/stdc++.h>
using namespace std;
const int MAX = 100005;
int N, K, P;
multiset<int> Ans[MAX], Even, Odd;
int main() {
  cin >> N >> K >> P;
  int e = P, o = K - P;
  for (int i = (1); i <= (N); i++) {
    int x;
    cin >> x;
    if (x % 2)
      Odd.insert(x);
    else
      Even.insert(x);
  }
  for (int i = (1); i <= (o); i++) {
    if (Odd.empty()) {
      cout << "NO";
      return 0;
    }
    Ans[i].insert(*Odd.begin());
    Odd.erase(Odd.begin());
  }
  if (((int)Odd.size()) % 2) {
    cout << "NO";
    return 0;
  }
  for (int i = (o + 1); i <= (o + e); i++) {
    if (Even.empty()) {
      if (((int)Odd.size()) < 2) {
        cout << "NO";
        return 0;
      }
      for (int t = (1); t <= (2); t++) {
        Ans[i].insert(*Odd.begin());
        Odd.erase(Odd.begin());
      }
    } else {
      Ans[i].insert(*Even.begin());
      Even.erase(Even.begin());
    }
  }
  while (!Even.empty()) {
    Ans[o + e].insert(*Even.begin());
    Even.erase(Even.begin());
  }
  while (!Odd.empty()) {
    Ans[o + e].insert(*Odd.begin());
    Odd.erase(Odd.begin());
  }
  cout << "YES\n";
  for (int i = (1); i <= (e + o); i++) {
    cout << ((int)Ans[i].size()) << " ";
    for (int x : Ans[i]) cout << x << " ";
    cout << "\n";
  }
}
