#include <bits/stdc++.h>
using namespace std;
inline void FAIL() {
  cout << "NO" << endl;
  exit(0);
}
int main() {
  stack<int> number[2];
  vector<vector<int> > odd, even;
  int n, k, p;
  cin >> n >> k >> p;
  int sum = 0;
  for (int i = 0; i < n; i++) {
    int num;
    cin >> num;
    sum = (num & 1) ^ sum;
    number[num & 1].push(num);
  }
  if (sum ^ ((k - p) & 1)) {
    FAIL();
  }
  if (number[1].size() < k - p) {
    FAIL();
  }
  if ((number[1].size() - k + p) / 2 + number[0].size() < p) {
    FAIL();
  }
  for (int i = k - p - 1; i >= 0; i--) {
    odd.emplace_back(vector<int>(1, number[1].top()));
    number[1].pop();
  }
  for (int i = p - 1; i >= 0; i--) {
    if (number[0].size() > 0) {
      even.emplace_back(vector<int>(1, number[0].top()));
      number[0].pop();
    } else {
      vector<int> temp;
      for (int j = 0; j < 2; j++) {
        temp.emplace_back(number[1].top());
        number[1].pop();
      }
      even.push_back(move(temp));
    }
  }
  while (number[0].size() > 0) {
    if (even.size() > 0) {
      even[0].push_back(number[0].top());
    } else {
      odd[0].push_back(number[0].top());
    }
    number[0].pop();
  }
  while (number[1].size() > 0) {
    for (int i = 0; i < 2; i++) {
      if (even.size() > 0) {
        even[0].push_back(number[1].top());
      } else {
        odd[0].push_back(number[1].top());
      }
      number[1].pop();
    }
  }
  cout << "YES" << endl;
  for (const auto& x : odd) {
    cout << x.size();
    for (const auto& y : x) {
      cout << " " << y;
    }
    cout << endl;
  }
  for (const auto& x : even) {
    cout << x.size();
    for (const auto& y : x) {
      cout << " " << y;
    }
    cout << endl;
  }
}
