//20
#include<iostream>
#include<algorithm>

using namespace std;

struct S{
  int o,f,m;
  void upd(int x){
    if(x<0){
      f-=x;
    }else{
      o=min(m,o+x);
    }
  }
};

int main(){
  for(int w,h;cin>>w>>h,w|h;){
    int f,m,o;
    cin>>f>>m>>o;
    int g[10][10];
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	cin>>g[i][j];
      }
    }
    int dp[11][10][51];
    fill(dp[0][0],dp[11][0],1<<30);
    for(int i=0;i<w;i++){
      dp[0][i][o]=0;
    }
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	for(int k=2;k<=m;k++){
	  S c={k-1,dp[i][j][k],m};
	  c.upd(g[i][j]);
	  for(int l=j;;){
	    S ca=c;
	    for(int r=l;;){
	      S cb=ca;
	      for(int ll=r;;){
		S cc=cb;
		for(int rr=ll;;){
		  dp[i+1][rr][cc.o]=min(cc.f,dp[i+1][rr][cc.o]);
		  rr++;
		  cc.o--;
		  if(w<=rr||cc.o<1)break;
		  if(max(r,j)<rr){
		    cc.upd(g[i][rr]);
		  }
		}
		ll--;
		cb.o--;
		if(ll<0||cb.o<1)break;
		if(ll<l){
		  cb.upd(g[i][ll]);
		}
	      }
	      r++;
	      ca.o--;
	      if(w<=r||ca.o<1)break;
	      if(j<r){
		ca.upd(g[i][r]);
	      }
	    }
	    l--;
	    c.o--;
	    if(l<0||c.o<1)break;
	    c.upd(g[i][l]);
	  }
	}
      }
    }
    int r=*min_element(dp[h][0],dp[h+1][0]);
    if(r<=f){
      cout<<r<<endl;
    }else{
      cout<<"NA"<<endl;
    }
  }
  return 0;
}