3 3 1
 300 2 300
 4000 4000 1
 4000 4000 100
 4 2 3
 3 300 300
 4000 100 4000
 3 300 1
 300 300 1
 4000 1000 3000
 3 2 4000
 4 3 2
 3 2 300
 4000 3998 2
 100 200 300
 300 300 300
 3 3 3
 10 10 10
 10 4 9
 239 300 231
 4000 2 3998
 200 100 300
 4000 2000 2000
 4000 4000 4000
 10 7 5
 4000 100 3900
 3 4000 4000

12
 775907030
 63263244
 994443885
 24
 496527918
 908339579
 828107078
 775907030
 876839920
 938379934
 48
 196174631
 296557186
 316471646
 375912430
 72
 318389383
 135283173
 774612666
 686088712
 949581532
 310481606
 997463324
 130636800
 221262673
 680114446

#include <bits/stdc++.h>
using namespace std;
template <class T>
const T& max(const T& a, const T& b, const T& c) {
  return max(a, max(b, c));
}
template <class T>
const T& min(const T& a, const T& b, const T& c) {
  return min(a, min(b, c));
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
long long poww(long long a, long long b) {
  if (b == 0) return 1;
  long long tmp = poww(a, b / 2);
  return (b & 1 ? a * tmp * tmp : tmp * tmp);
}
long long sumOfDigs(string s) {
  long long sum = 0;
  for (int i = 0; i < s.length(); i++) sum += s[i] - '0';
  return sum;
}
long long sumOfDigs(long long n) {
  return (n < 10 ? n : n % 10 + sumOfDigs(n / 10));
}
string itos(long long i) {
  string s = "";
  while (i) {
    s += char(i % 10 + '0');
    i /= 10;
  }
  reverse(s.begin(), s.end());
  return s;
}
long long stoi(string& s) {
  long long tot = 0;
  for (int i = (int)s.length() - 1, j = 1; i >= 0; i--, j *= 10) {
    tot += j * (s[i] + '0');
  }
  return tot;
}
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
using namespace std;
void t() { freopen("test.txt", "r", stdin); }
long long mod = 1000 * 1000 * 1000 + 7;
;
long long modpower(long long x, long long y, long long p) {
  x %= mod;
  if (!y) return 1;
  long long res = 1;
  if (y & 1) {
    res *= x;
    res %= p;
  }
  long long z = modpower(x, y / 2, p);
  z %= p;
  z *= z;
  z %= mod;
  res *= z;
  res %= p;
  return res;
}
long long x, y;
long long d;
void exgcd(long long a, long long b) {
  if (b == 0) {
    d = a;
    x = 1, y = 0;
    return;
  }
  exgcd(b, a % b);
  long long t = x;
  x = y;
  y = t - (a / b) * y;
}
int a[1000 * 1000];
vector<int> o, e;
int main() {
  int n, k, p;
  cin >> n >> k >> p;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++)
    (a[i] & 1 ? o.push_back(a[i]) : e.push_back(a[i]));
  if (((int)o.size()) < k - p) {
    return cout << "NO" << endl, 0;
  }
  if ((((int)o.size()) - k + p) % 2 != 0) {
    return cout << "NO" << endl, 0;
  }
  if (((int)e.size()) + (((int)o.size()) - k + p) / 2 < p) {
    return cout << "NO" << endl, 0;
  }
  cout << "YES" << endl;
  for (int i = 1; i <= k - p - 1; i++) {
    cout << 1 << " " << o.back() << endl;
    o.pop_back();
  }
  if (((int)e.size()) > 0) {
    cout << 1 << " " << o.back() << endl;
    o.pop_back();
  } else {
    cout << ((int)o.size()) << " ";
    for (auto t : o) cout << t << " ";
    cout << endl;
  }
  if (((int)e.size()) >= p - 1) {
    for (int i = 1; i <= p - 1; i++) {
      cout << 1 << " " << e.back() << endl;
      e.pop_back();
    }
    cout << ((int)e.size()) + ((int)o.size()) << " ";
    for (auto t : e) cout << t << " ";
    for (auto t : o) cout << t << " ";
    cout << endl;
  } else {
    int extra = p - ((int)e.size());
    for (int i = 0; i < e.size(); i++) cout << 1 << " " << e[i] << endl;
    for (int i = 1; i <= extra - 1; i++) {
      cout << 2 << " ";
      cout << o.back() << " ";
      o.pop_back();
      cout << o.back() << endl;
      o.pop_back();
    }
    if (extra > 1) {
      cout << ((int)o.size()) << " ";
      for (auto t : o) cout << t << " ";
      cout << endl;
    }
  }
  return 0;
}
