#include <bits/stdc++.h>
using namespace std;
const int MX = 1e5 + 5;
int n, k, p, _p, od, ev, Arr[MX];
vector<int> even[MX], odd[MX];
void check() {
  if (od < _p) {
    printf("NO\n");
    return;
  } else if (ev < p) {
    int sz = odd[0].size(), cnt = 0;
    for (int i = sz - 1; i >= 0; i--) {
      if (i - 1 >= 0) {
        even[ev].push_back(odd[0][i]);
        even[ev++].push_back(odd[0][i - 1]);
        cnt += 2;
        i--;
      }
      if (ev == p) break;
    }
    for (int i = 0; i < cnt; i++) {
      odd[0].pop_back();
    }
    if (ev < p) {
      printf("NO\n");
      return;
    }
  }
  if (!(odd[0].size() & 1) && _p > 0) {
    printf("NO\n");
    return;
  }
  if (_p == 0) {
    if (odd[0].size() & 1) {
      printf("NO\n");
      return;
    } else {
      int sz = odd[0].size() - 1;
      while (odd[0].size()) {
        int num = odd[0][sz--];
        even[0].push_back(num);
        odd[0].pop_back();
      }
    }
  }
  if (p == 0) {
    if (even[0].size()) {
      int sz = even[0].size() - 1;
      while (even[0].size()) {
        int num = even[0][sz--];
        odd[0].push_back(num);
        even[0].pop_back();
      }
    }
  }
  printf("YES\n");
  for (int i = 0; i < p; i++) {
    int sz = even[i].size();
    printf("%d", sz);
    for (int j = 0; j < sz; printf(" %d", even[i][j]), j++)
      ;
    printf("\n");
  }
  for (int i = 0; i < _p; i++) {
    int sz = odd[i].size();
    printf("%d", sz);
    for (int j = 0; j < sz; printf(" %d", odd[i][j]), j++)
      ;
    printf("\n");
  }
}
void solve() {
  ev = 0, od = 0;
  _p = k - p;
  for (int i = 0; i < n; i++) {
    if (Arr[i] & 1) {
      if (od == _p) {
        odd[0].push_back(Arr[i]);
      } else {
        odd[od++].push_back(Arr[i]);
      }
    } else {
      if (ev == p) {
        even[0].push_back(Arr[i]);
      } else {
        even[ev++].push_back(Arr[i]);
      }
    }
  }
  check();
}
int main() {
  scanf("%d %d %d", &n, &k, &p);
  for (int i = 0; i < n; scanf("%d", &Arr[i]), i++)
    ;
  solve();
  return 0;
}
