#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
using pr = pair<T, U>;
template <typename T>
using vt = vector<T>;
template <class T>
bool cmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool cmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
inline namespace CP {
inline namespace Output {
template <class T>
void outv(vector<T> v, int add = 0, bool standard = 1) {
  for (T& i : v) (standard ? cout : cerr) << (i + add) << " ";
  cout << '\n';
}
template <class T>
void put(T output) {
  cout << output << '\n';
}
}  // namespace Output
class IO {
 public:
  void setIn(string second) { (void)!freopen(second.c_str(), "r", stdin); }
  void setOut(string second) { (void)!freopen(second.c_str(), "w", stdout); }
  void Input(int __use_input = 0) {
    if (!!__use_input && 0) {
      setIn("in" + to_string(__use_input) + ".txt");
    }
  }
  IO FastIO() {
    cin.tie(nullptr)->sync_with_stdio(0);
    return *this;
  }
  IO* SetIO(string __s = "", string __t = "") {
    cin.exceptions(cin.failbit);
    if ((int)(__t).size())
      setIn(__s), setOut(__t);
    else if ((int)(__s).size())
      setIn(__s + ".in"), setOut(__s + ".out");
    return this;
  }
};
}  // namespace CP
const int MX = (1e5 + 5);
int N, K, P;
int a[MX];
void test_case() {
  cin >> N >> K >> P;
  for (int i = (0); i < (N); ++i) cin >> a[i];
  vt<vt<int>> sets(K, vt<int>());
  vt<pr<int, int>> even_pairs, odd_pairs;
  int ptr = 0, used = 0;
  for (int i = (0); i < (N); ++i) {
    if (a[i] & 1 && ptr < (K - P))
      sets[ptr++].push_back(a[i]);
    else if (a[i] & 1) {
      if (used)
        odd_pairs.back().second = a[i];
      else
        odd_pairs.push_back({a[i], -1});
      used = !used;
    } else
      even_pairs.push_back({a[i], -1});
  }
  if (ptr != (K - P) || used ||
      (int)(even_pairs).size() + (int)(odd_pairs).size() < P)
    return void(put("NO"));
  even_pairs.insert(even_pairs.end(), odd_pairs.begin(), odd_pairs.end());
  if (P == 0) {
    for (auto pr : even_pairs) {
      if (pr.first & 1) sets[0].push_back(pr.second);
      sets[0].push_back(pr.first);
    }
  } else {
    int have = (int)(even_pairs).size();
    for (int i = (0); i < (P); ++i) {
      if (i == P - 1)
        for (auto pair : even_pairs) {
          sets[ptr].push_back(pair.first);
          if (pair.first & 1) sets[ptr].push_back(pair.second);
        }
      else {
        if (even_pairs.back().first & 1)
          sets[ptr].push_back(even_pairs.back().second);
        sets[ptr++].push_back(even_pairs.back().first);
        even_pairs.pop_back();
      }
    }
  }
  put("YES");
  for (int i = (0); i < (K); ++i) {
    cout << (int)(sets[i]).size() << " ";
    for (int j = (0); j < ((int)(sets[i]).size()); ++j)
      cout << sets[i][j] << " \n"[j == (int)(sets[i]).size() - 1];
  }
}
int main() {
  CP::IO().SetIO()->FastIO().Input(0);
  int Test_Cases = 1;
  for (int tt = 1; tt <= Test_Cases; ++tt) {
    ;
    ;
    test_case();
  }
  return 0;
}
