import std.stdio;  // readln
import std.array;  // split
import std.string; // string
import std.conv;   // to

const int INF = int.max / 10;

int W, H, F, M, O; // inputs
int[][] G;         // 動的配列になる

int memo[11][11][11][11][51];
int mm[11][11][11][11][51];

int main()
{
  for(int i1 = 0; i1 < 11; i1++)
	for(int i2 = 0; i2 < 11; i2++)
	  for(int i3 = 0; i3 < 11; i3++)
		for(int i4 = 0; i4 < 11; i4++)
		  for(int i5 = 0; i5 < 51; i5++)
			mm[i1][i2][i3][i4][i5] = -1;
  
  while(input()){
	// メモ化テーブルを初期化したい
	// もっと格好いい方法があるだろう…
	memo = mm;

	int res = INF;

	for(int i = 0; i < W; i++){
	  auto next_o = O - 1 + max(0, G[0][i]);
	  auto expense = - min(0, G[0][i]);
	  res = min(res, rec(i, i, i, 0, next_o) + expense);
	}

	writeln(res <= F ? to!string(res) : "NA");
  }
  
  return 0;
}

// return 総発掘費用
int rec(int left, int right, int x, int y, int o)
{
  if(o <= 0) return INF;
  if(y + 1 == H) return 0;

  if(memo[left][right][x][y][o] != -1) return memo[left][right][x][y][o];
  
  int res = INF;
  
  if(0 < left){
	auto next_o = min(o - (x - left + 1) + max(0, G[y][left - 1]), M);
	auto expense =  - min(0, G[y][left - 1]);
	res = min(res, rec(left - 1, right, left - 1, y, next_o) + expense);
  }

  if(right + 1 < W){
	auto next_o = min(o - (right + 1 - x) + max(0, G[y][right + 1]), M);
	auto expense =  - min(0, G[y][right + 1]);
	res = min(res, rec(left, right + 1, right + 1, y, next_o) + expense);
  }

  for(int d = left; d <= right; d++){
	auto next_o = min(o - abs(x - d) - 1 + max(0, G[y + 1][d]), M);
	auto expense =  - min(0, G[y + 1][d]);
	res = min(res, rec(d, d, d, y + 1, next_o) + expense);
  }

  return memo[left][right][x][y][o] = res;  
}

// プロトタイプ宣言とかいらない
bool input()
{
  string[] input = split(readln()); // 一行入力をデリミタで区切る
	
  W = to!int(input[0]), H = to!int(input[1]);

  if(W == 0 && H == 0) return false;
  
  input = split(readln());
  F = to!int(input[0]), M = to!int(input[1]), O = to!int(input[2]);

  G.length = H; // 配列の要素確保
  for(int y = 0; y < H; y++){
	G[y].length = W;

	input = split(readln());

	for(int x = 0; x < W; x++) G[y][x] = to!int(input[x]);
  }

  return true;
}

// テンプレート
// これくらいはあると思うけれど、どこにあるのだろう
template abs(T) { T abs(T a) { return a < 0 ? -a : a; } }
template max(T) { T max(T a, T b) { return a < b ? b : a; } }
template min(T) { T min(T a, T b) { return a < b ? a : b; } }