#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
const int N = (int)1e5 + 100;
int a[N];
void print(vector<int> v) {
  assert(int((v).size()) >= 1);
  cout << int((v).size()) << " ";
  for (int i = int(0); i < int(int((v).size())); ++i) {
    if (i) cout << " ";
    cout << v[i];
  }
  cout << endl;
}
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  for (int i = int(0); i < int(n); ++i) cin >> a[i];
  vector<vector<int> > answer;
  vector<int> even, odd;
  for (int i = int(0); i < int(n); ++i) {
    if (a[i] % 2)
      odd.push_back(a[i]);
    else
      even.push_back(a[i]);
  }
  int oddNeed = k - p;
  int evenNeed = p;
  int ok = true;
  if (int((odd).size()) < oddNeed || int((odd).size()) % 2 != oddNeed % 2) {
    ok = false;
  } else {
    if (int((even).size()) + (int((odd).size()) - oddNeed) / 2 < evenNeed) {
      ok = false;
    } else {
      for (int i = int(0); i < int(oddNeed); ++i) {
        vector<int> v;
        v.push_back(odd[odd.size() - 1]);
        odd.pop_back();
        answer.push_back(v);
      }
      assert(int((odd).size()) % 2 == 0);
      while (odd.size() >= 2) {
        vector<int> v;
        v.push_back(odd[odd.size() - 1]);
        odd.pop_back();
        v.push_back(odd[odd.size() - 1]);
        odd.pop_back();
        answer.push_back(v);
        evenNeed--;
      }
      for (int i = int(0); i < int(int((even).size())); ++i) {
        vector<int> v;
        v.push_back(even[i]);
        answer.push_back(v);
      }
    }
  }
  if (!ok) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    vector<int> last;
    assert(answer.size() >= k);
    for (int i = k - 1; i < answer.size(); i++) {
      for (int j = int(0); j < int(answer[i].size()); ++j) {
        last.push_back(answer[i][j]);
      }
    }
    for (int i = int(0); i < int(k - 1); ++i) {
      print(answer[i]);
    }
    print(last);
  }
  return 0;
}
