#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cerr.tie(nullptr);
    int t, n, k;
    cin >> t >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    if ((n - k) % 2 == 1) {
        cout << "NE" << '\n';
        return 0;
    }
    sort(a.begin(), a.end());
    int nula_poz = lower_bound(a.begin(), a.end(), 0) - a.begin();
    int manjih = nula_poz;
    int potrebno = (n - k) / 2;
    int ispis[n] = {0};
    int ispis_poz = 0;
    if (potrebno <= manjih) {
        int promena = manjih - potrebno;
        if (nula_poz - promena < 0) {
            cout << "NE" << '\n';
            return 0;
        }
        int granicna_poz = nula_poz - promena;
        int granicna = a[granicna_poz];
        if (promena == 0)
            granicna = 0;
        if (granicna_poz + granicna < 0) {
            cout << "NE" << '\n';
            return 0;
        }
        int skroz_dole = granicna_poz + granicna;
        for (int i = granicna_poz - 1; i >= skroz_dole; i--) {
            ispis[ispis_poz] = a[i];
            ispis_poz++;
        }
        int desno = granicna_poz;
        int levo = skroz_dole - 1;
        while (levo >= 0 && desno < n) {
            ispis[ispis_poz] = a[desno];
            ispis_poz++;
            desno++;
            ispis[ispis_poz] = a[levo];
            ispis_poz++;
            levo--;
        }
        int brojka = granicna;
        while (levo >= 0) {
            if (a[levo] >= brojka) {
                cout << "NE" << '\n';
                return 0;
            }
            ispis[ispis_poz] = a[levo];
            brojka--;
            levo--;
            ispis_poz++;
        }
        while (desno < n) {
            if (a[desno] < brojka) {
                cout << "NE" << '\n';
                return 0;
            }
            ispis[ispis_poz] = a[desno];
            brojka++;
            desno++;
            ispis_poz++;
        }
        cout << "DA" << '\n';
        for (int i = 0; i < n; i++)
            cout << ispis[i] << ' ';
        cout << '\n';
        return 0;
    }
    if (potrebno > manjih) {
        int promena = potrebno - manjih;
        if (nula_poz + promena - 1 >= n) {
            cout << "NE" << '\n';
            return 0;
        }
        int granicna_poz = nula_poz + promena - 1;
        int granicna = a[granicna_poz];
        if (granicna_poz + granicna + 1 >= n) {
            cout << "NE" << '\n';
            return 0;
        }
        int skroz_gore = granicna_poz + granicna + 1;
        for (int i = granicna_poz + 1; i <= skroz_gore; i++) {
            ispis[ispis_poz] = a[i];
            ispis_poz++;
        }
        int levo = granicna_poz;
        int desno = skroz_gore + 1;
        while (levo >= 0 && desno < n) {
            ispis[ispis_poz] = a[desno];
            ispis_poz++;
            desno++;
            ispis[ispis_poz] = a[levo];
            ispis_poz++;
            levo--;
        }
        int brojka = granicna + 1;
        while (levo >= 0) {
            if (a[levo] >= brojka) {
                cout << "NE" << '\n';
                return 0;
            }
            ispis[ispis_poz] = a[levo];
            brojka--;
            levo--;
            ispis_poz++;
        }
        while (desno < n) {
            if (a[desno] < brojka) {
                cout << "NE" << '\n';
                return 0;
            }
            ispis[ispis_poz] = a[desno];
            brojka++;
            desno++;
            ispis_poz++;
        }
        cout << "DA" << '\n';
        for (int i = 0; i < n; i++)
            cout << ispis[i] << ' ';
        cout << '\n';
        return 0;
    }
    return 0;
}