#include <bits/stdc++.h>
using namespace std;
std::vector<std::string> &split(const std::string &s, char delim,
                                std::vector<std::string> &elems) {
  std::stringstream ss(s);
  std::string item;
  while (std::getline(ss, item, delim)) {
    elems.push_back(item);
  }
  if (s[s.size() - 1] == delim) elems.push_back("");
  return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
  std::vector<std::string> elems;
  split(s, delim, elems);
  return elems;
}
template <class T>
void p2d(T c, int n, int m) {
  printf("\n");
  ;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << c[i][j] << " ";
    }
    printf("\n");
    ;
  }
}
int main() {
  int n, p, k;
  scanf("%d", &n);
  scanf("%d", &k);
  scanf("%d", &p);
  int oldp = p;
  vector<int> even, odd;
  for (int i = 0; i < n; ++i) {
    int temp;
    scanf("%d", &temp);
    if (temp & 1)
      odd.push_back(temp);
    else
      even.push_back(temp);
  }
  int x = int((even).size());
  int y = int((odd).size());
  if (y < k - p) {
    printf("NO\n");
    return 0;
  }
  y -= k - p;
  if (y & 1) {
    printf("NO\n");
    return 0;
  }
  p -= y / 2;
  if (oldp == 0) {
    printf("YES\n");
    for (int i = 0; i < k - 1; ++i) {
      printf("1 ");
      printf("%d\n", odd.back());
      odd.pop_back();
    }
    printf("%d ", int((odd).size()) + int((even).size()));
    for (int i = 0; i < int((odd).size()); ++i) {
      printf("%d ", odd[i]);
    }
    for (int i = 0; i < int((even).size()); ++i) {
      printf("%d ", even[i]);
    }
    printf("\n");
    return 0;
  }
  if (p <= 0) {
    printf("YES\n");
    for (int i = 0; i < k - oldp; ++i) {
      printf("1 ");
      printf("%d\n", odd.back());
      odd.pop_back();
    }
    for (int i = 0; i < oldp - 1; ++i) {
      printf("2 ");
      printf("%d ", odd.back());
      odd.pop_back();
      printf("%d\n", odd.back());
      odd.pop_back();
    }
    printf("%d ", int((odd).size()) + int((even).size()));
    for (int i = 0; i < int((odd).size()); ++i) {
      printf("%d ", odd[i]);
    }
    for (int i = 0; i < int((even).size()); ++i) {
      printf("%d ", even[i]);
    }
    printf("\n");
  } else {
    if (x < p) {
      printf("NO\n");
      return 0;
    } else {
      printf("YES\n");
      for (int i = 0; i < k - oldp; ++i) {
        printf("1 ");
        printf("%d\n", odd.back());
        odd.pop_back();
      }
      for (int i = 0; i < y / 2; ++i) {
        printf("2 ");
        printf("%d ", odd.back());
        odd.pop_back();
        printf("%d\n", odd.back());
        odd.pop_back();
      }
      for (int i = 0; i < p - 1; ++i) {
        printf("1 ");
        printf("%d\n", even.back());
        even.pop_back();
      }
      printf("%d ", int((even).size()));
      for (int i = 0; i < int((even).size()); ++i) {
        printf("%d ", even[i]);
      }
      printf("\n");
    }
  }
  int d;
  scanf("%d", &d);
  return 0;
}
