#include <stdio.h>
#include <stdlib.h>

#define ARR_MAX 5000

typedef struct {
    int vrednost;
    unsigned broj;
}
hashTip;

void prikazNiza(int arr[ARR_MAX], int length)
{
    for(int i=0;i<length;i++){
        printf("%d", arr[i]);
        if(i<length-1) printf(" ");
    }
}

int utisak(int arr[ARR_MAX], int length){
    int trenutnaUvazenost = 0;
    for(int i=0;i<length;i++){
        if(trenutnaUvazenost<=arr[i]) trenutnaUvazenost++;
        else trenutnaUvazenost--;
    }
    return trenutnaUvazenost;
}


int uHashuJe(hashTip niz[ARR_MAX], int length, int broj){
    for(int i=0;i<length;i++){
        if(niz[i].vrednost==broj) return i;
    }
    return -1;
}

int proveraTestPrimera12p(int niz[ARR_MAX], int length){
    hashTip mapa[length];
    int brojRazlicitih=0;



}
//46 for ciklus koji ide od N do 1

int main()
{
    int t, brojLjudi, k;

    scanf("%d", &t);
    scanf("%d %d", &brojLjudi, &k);

    int niz[brojLjudi];
    for(int i=0;i<brojLjudi;i++){
        scanf("%d", &niz[i]);
    }

    int korigovaNiz[brojLjudi];
    for(int i=0;i<brojLjudi;i++){
        korigovaNiz[i]=niz[i];
    }

    // ako je N neparan, samo neparni K su ostvarivi
    if(k==utisak(korigovaNiz, brojLjudi) && k<=brojLjudi){
        printf("DA");
        if(t==1){
            printf("\n");
            prikazNiza(korigovaNiz, brojLjudi);
        }
    }
    else
        printf("NE");
    //else if(t==0) printf("DA");
    // ne postoji test primer sa t=1 i rezultatom NE
    //else printf("NE");

    return 0;
}

///(n-k)/2

///-5 -3 -2 0
///     2 3 4