func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 10;   vector<int> ans[N];   int a[N], b[N], c[N];   int n, k, p;   int main() {     scanf( %d%d%d , &n, &k, &p);     int s = 0;     int _x = 0, _y = 0;     for (int i = 0; i < n; ++i) {       scanf( %d , &a[i]);       s += a[i];       if (a[i] & 1)         b[_x++] = a[i];       else         c[_y++] = a[i];     }     if ((k - p) & 1) {       if (s % 2 == 0) {         printf( NO n );         return 0;       }     }     if ((k - p) % 2 == 0) {       if (s & 1) {         printf( NO n );         return 0;       }     }     int j = 0;     if (_y >= p) {       for (int i = 0; i < p; ++i) {         ans[j++].push_back(c[i]);       }       if (_x < (k - p)) {         printf( NO n );         return 0;       } else {         for (int i = 0; i < k - p; ++i) {           ans[j++].push_back(b[i]);         }         for (int i = p; i < _y; ++i) ans[j - 1].push_back(c[i]);         for (int i = k - p; i < _x; ++i) ans[j - 1].push_back(b[i]);       }     } else {       for (int i = 0; i < _y; ++i) {         ans[j++].push_back(c[i]);       }       if (_x / 2 < (p - _y)) {         printf( NO n );         return 0;       }       for (int i = 0; i < p - _y; ++i) {         ans[j].push_back(b[i * 2]);         ans[j++].push_back(b[i << 1 | 1]);       }       if ((_x - (p - _y) * 2) < (k - p)) {         printf( NO n );         return 0;       } else {         for (int i = 2 * (p - _y); i < (2 * (p - _y) + k - p); ++i) {           ans[j++].push_back(b[i]);         }         for (int i = (2 * (p - _y) + k - p); i < _x; ++i)           ans[j - 1].push_back(b[i]);       }     }     printf( YES n );     for (int i = 0; i < j; ++i) {       int n = ans[i].size();       printf( %d  , n);       for (int k = 0; k < n; ++k) {         printf( %d  , ans[i][k]);       }       printf(  n );     }     return 0;   }   