#include <iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
static int binarna(int &l,int &d,vector<int>&a,int k)
{
    int mid=(l+d)/2;
    int trval=mid;
    for(int i=0;i<a.size();i++)
    {
        if(a[i]>=trval)trval++;
        else trval--;
    }
    if(trval==k)return mid;
    if(trval>k)
        {d=mid;return binarna(mid,d,a,k);}
    else
        {l=mid;return binarna(l,mid,a,k);}
}
static int vratibr(vector<int>b,int k,int pocval)
{
    int trval=pocval;
    for(int i=0;i<b.size();i++)
    {
        if(b[i]>=trval)trval++;
        else trval--;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt;
    tt=1;
    while(tt--)
    {
        int t;
        cin>>t;
        int n,k;
        cin>>n>>k;
        bool slucaji=true;
        bool slucaj1=true;
        vector<int>a(n);
        int najmanji=INT_MAX;
        int najveci=INT_MIN;
        map<int,int>cnt;
        for(int i=0;i<n;i++)
            {cin>>a[i];najveci=max(najveci,a[i]);najmanji=min(najmanji,a[i]);
            if(a[i]!=i)slucaji=false;
            if(a[i]!=-1||a[i]!=1)slucaj1=false;
            cnt[a[i]]++;}
        vector<bool>up(n);
        vector<int>moraminus;
        vector<int>moraplus;
        sort(a.begin(),a.end());
        int trval=0;
        int tr=0;
        while(a[tr]<trval)
        {
            trval--;
            moraminus.push_back(a[tr]);
            tr++;
        }
        for(int i=tr;i<n;i++)
        {
            if(a[i]>=trval)trval++;
            else trval--;
        }
        int maxval=trval;
        reverse(a.begin(),a.end());
        trval=0;
        tr=0;
        while(a[tr]>=trval)
        {
            trval++;
            moraplus.push_back(a[tr]);
            tr++;
        }
        for(int i=0;i<n;i++)
        {
            if(a[i]>=trval){trval++;up[i]=true;}
            else {trval--;up[i]=false;}
        }
        vector<int>izmedju;
        for(int i=moraplus.size();i<n-moraminus.size();i++)
            izmedju.push_back(a[i]);
        int minval=trval;
        if(t==1)
        {
        if((k+minval)%2==0&&k<=maxval&&k>=minval){
            if(maxval==k)
            {
                cout<<"DA"<<endl;
                for(int i=0;i<n;i++)
                cout<<a[i]<<" ";
                break;
            }
            if(slucaji)
            {
                cout<<"DA"<<endl;
                for(int i=0;i<n-k;i++)
                    cout<<n-i<<" ";
                for(int i=n-k+1;i<k;i++)
                    cout<<i<<" ";
                for(int i=k;i<n;i++)
                {
                    cout<<i+1<<" ";
                }
                break;
            }
            if(slucaj1)
                if(k==2||k==1){
                for(int i=0;i<cnt[-1];i++)
                cout<<-1<<" ";
                for(int i=0;i<cnt[1];i++)
                    cout<<1<<" ";
                }
                if(k==0)
                {
                    for(int i=0;i<cnt[-1]-1;i++)
                        cout<<-1<<" ";
                    for(int i=0;i<cnt[1];i++)
                        cout<<1<<" ";
                        cout<<-1;
                }
                if(k==-1||k==-2)
                {
                    for(int i=0;i<cnt[1];i++)
                        cout<<1<<" ";
                    for(int i=0;i<cnt[-1];i++)
                        cout<<-1<<" ";
                }
                break;
            }
            else
                cout<<"NE"<<endl;

        }
        else
        {
            if((k+minval)%2==0&&k<=maxval&&k>=minval)
                cout<<"DA"<<endl;
            else
                cout<<"NE"<<endl;
        }

    }

}