#include <bits/stdc++.h>
using namespace std;
void out(vector<vector<int>> &xs) {
  cout << "YES\n";
  for (int i = 0; i < xs.size(); i++) {
    cout << xs[i].size() << " ";
    for (int j = 0; j < xs[i].size(); j++) cout << xs[i][j] << " ";
    cout << "\n";
  }
}
void solve() {
  int n, k, p;
  cin >> n >> k >> p;
  vector<vector<int>> dp(2);
  vector<vector<int>> ans(k);
  for (int i = 0, num; i < n; i++) {
    cin >> num;
    dp[num % 2].push_back(num);
  }
  int m = k - p;
  if (dp[1].size() < m || (dp[1].size() - m) % 2 == 1) {
    cout << "NO";
    return;
  }
  for (int i = 0; i < m; i++) ans[i].push_back(dp[1].back()), dp[1].pop_back();
  if (p == 0) {
    for (int i = 0; i < dp[1].size(); i++) ans.back().push_back(dp[1][i]);
    for (int i = 0; i < dp[0].size(); i++) ans.back().push_back(dp[0][i]);
    out(ans);
    return;
  }
  if ((dp[1].size() / 2 + dp[0].size()) < p) {
    cout << "NO";
    return;
  }
  int i = 0;
  for (; dp[1].size();) {
    ans[m + i].push_back(dp[1].back()), dp[1].pop_back();
    ans[m + i].push_back(dp[1].back()), dp[1].pop_back();
    i = (i + 1) % p;
  }
  for (int j = 0; j < dp[0].size(); j++) {
    ans[m + i].push_back(dp[0][j]);
    i = (i + 1) % p;
  }
  reverse(ans.begin(), ans.end());
  out(ans);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  solve();
  return 0;
}
