#include <bits/stdc++.h>
using namespace std;
string res[100010];
vector<int> ans[100010];
string int_to_string(const int port) {
  stringstream ss;
  ss << port;
  return ss.str();
}
int main() {
  int n, k, p;
  scanf("%d %d %d", &n, &k, &p);
  int a[100010], num_odd = 0;
  long long sum = 0;
  vector<int> odd, even;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    sum += a[i];
    if (a[i] % 2 == 0)
      even.push_back(a[i]);
    else {
      odd.push_back(a[i]);
      num_odd++;
    }
  }
  if (sum % 2 == 0 && (k - p) % 2 == 1 || sum % 2 == 1 && (k - p) % 2 == 0 ||
      num_odd < k - p) {
    printf("NO");
    return 0;
  }
  for (int i = 1; i <= k - p; i++) {
    ans[i].push_back(odd.back());
    odd.pop_back();
  }
  if (odd.size() % 2 == 1 || (int)odd.size() / 2 + n - num_odd < p) {
    printf("NO");
    return 0;
  }
  int i = k - p + 1;
  for (int j = k - p + 1; j <= k; j++) {
    if (!even.empty()) {
      ans[j].push_back(even.back());
      even.pop_back();
    } else {
      for (i = 0; i < 2; i++) {
        ans[j].push_back(odd.back());
        odd.pop_back();
      }
    }
  }
  int j = k;
  for (i = 0; i < odd.size(); i++) {
    ans[j].push_back(odd[i]);
  }
  for (i = 0; i < even.size(); i++) {
    ans[j].push_back(even[i]);
  }
  cout << "YES" << endl;
  for (i = 1; i <= k; i++) {
    printf("%d ", ans[i].size());
    for (j = 0; j < ans[i].size(); j++) {
      printf("%d ", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
