#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;   }