#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 1e5 + 10;
int arr[N];
vector<int> odd, even;
signed main()
{
int n, k, p;
cin >> n >> k >> p;
int sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
sum += arr[i];
if (arr[i] & 1) odd.push_back(arr[i]);
else even.push_back(arr[i]);
}
string s;
if (((k - p) & 1) ^ (sum & 1))
{
cout << "NO\n";
return 0;
}
else s += "YES\n";
for (int i = 1; i <= p; i++) // p 个数是偶数
{
if (even.empty())
{
if (odd.empty())
{
cout << "NO" << endl;
return 0;
}
int a = odd.back();
odd.pop_back();
if (odd.empty())
{
cout << "NO" << endl;
return 0;
}
int b = odd.back();
odd.pop_back();
s += "2 " + to_string(a) + " " + to_string(b) + endl;
}
else
{
s += "1 " + to_string(even.back()) + endl;
even.pop_back();
}
}
if (k != p)
{
for (int i = 1; i <= (k - p - 1); i++)
{
if (odd.empty())
{
cout << "NO" << endl;
return 0;
}
s += "1 " + to_string(odd.back()) + endl;
odd.pop_back();
}
if ((odd.size() + even.size()))
{
s += to_string(odd.size() + even.size()) + " ";
for (int i: odd)
{
s += to_string(i) + " ";
}
for (int i: even)
{
s += to_string(i) + " ";
}
}
}
cout << s;
return 0;
}
CF RID 284108299
不知道为啥#24少了一组数
应该是被吞了