//这是一道有n多情况的烦死人的让我错了n遍的模拟题
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std; int a[],n,k,p;
int vis[];
int ji=,ou=; int main()
{
memset(vis,,sizeof(vis));
cin >> n >> k >> p;
for(int i=;i<n;i++)
{
cin >> a[i];
if(a[i]%==)
ji++;
else ou++;
}
if((ji-(k-p))%==||ji<k-p||((ji-(k-p))/+ou<p))
printf("NO\n");
else
{
printf("YES\n");
int odd=,even=,al=;
if(p!=)
{
for(int i=;i<n;i++)
{
if(a[i]%)
{
if(odd<k-p)
{
printf("1 %d\n",a[i]);
odd++;
vis[i]=;
al++;
}
else break;
}
} for(int i=;i<n;i++)
{
if(a[i]%==)
{
if(even<p-)
{
printf("1 %d\n",a[i]);
even++;
vis[i]=;
al++;
}
else break;
}
}
int flag=;
for(int i=;i<n;i++)
{
if(even<p-)
{
if(vis[i]==&&a[i]%==&&flag==)
printf("2 %d",a[i]),flag=,vis[i]=,al++;
else if(vis[i]==&&a[i]%==&&flag==)
printf(" %d\n",a[i]),flag=,vis[i]=,even++,al++;
}
else break;
}
if(n-al>)
{
cout << n-al;
for(int i=;i<n;i++)
{
if(vis[i]==)
printf(" %d",a[i]);
}
} }
else
{
for(int i=;i<n;i++)
{
if(a[i]%)
{
if(odd<k-p-)
{
printf("1 %d\n",a[i]);
odd++;
vis[i]=;
al++;
}
else break;
}
}
if(n-al>)
{
cout << n-al;
for(int i=;i<n;i++)
{
if(vis[i]==)
printf(" %d",a[i]);
}
} }
puts("");
}
return ;
}