#include <bits/stdc++.h>

using namespace std;


int main()
{
    int t;
    cin>>t;
    int n,k;
    cin>>n>>k;
    if((n-k)%2!=0){
        cout<<"NE"<<endl;
        return 0;
    }
    vector<int> v(n);
    for(int i=0;i<n;i++)cin>>v[i];
    sort(v.begin(),v.end());
    int d=(n-k)/2;
    vector<int> dole(d);
    vector<int> gore(n-d);
    for(int i=0;i<d;i++)dole[i]=v[i];
    for(int i=d;i<n;i++)gore[i-d]=v[i];
    bool ok=true;
    int cilj=0;
    /*
    for(int i=0;i<d;i++)cout<<dole[i]<<' ';
    cout<<endl;
    for(int i=0;i<n-1;i++)cout<<gore[i]<<' ';
    cout<<endl;
    */
    vector<int> put;
    if(k>=0){
        int itg=0;
        int itd=0;
        for(int i=0;i<n;i++){
            if(itg<n-d && gore[itg]>=cilj){
                cilj++;
                put.push_back(gore[itg]);
                itg++;
            }
            else if(itd<d && dole[itd]<cilj){
                put.push_back(dole[itd]);
                itd++;
                cilj--;
            }
            else{ ok=false;break;}
           // cout<<cilj<<' '<<itg<<' '<<itd<<endl;
        }

    }
    else{
        reverse(gore.begin(),gore.end());
        reverse(dole.begin(),dole.end());

        int itg=0;
        int itd=0;
        for(int i=0;i<n;i++){
            if(itd<d && dole[itd]<cilj){
                put.push_back(dole[itd]);
                itd++;
                cilj--;
            }
            else if(itg<n-d && gore[itg]>=cilj){
                cilj++;
                put.push_back(gore[itg]);
                itg++;
            }

            else{ ok=false;break;}
        }
    }
    if(!ok){
        cout<<"NE"<<endl;
        return 0;
    }
    cout<<"DA"<<endl;
    for(int i=0;i<n;i++)cout<<put[i]<<' ';
    cout<<endl;

    /*
    if(k>=0){
        for(auto a:gore)if(a>=cilj)cilj++;
        if(cilj<k)ok=false;
    }
    else{
        for(auto a:dole)if(a<cilj)cilj--;
        if(cilj>k)ok=false;
    }
    if(!ok){
        cout<<"NE"<<endl;
        return 0;
    }
    if(k>=0){

    }
    */



    return 0;
}