import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Bye_dust {
    static int R;
    static int C;
    static int T;
    static int[][] map;
    static int[] dr = {0,1,0,-1};
    static int[] dc = {1,0,-1,0};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        R = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        T = Integer.parseInt(st.nextToken());
        map = new int[R][C];
        boolean first = true;
        Queue<int[]> que = new LinkedList<>();
        for (int i = 0; i < R; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < C; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        for (int k = 0; k < T; k++) {
            int[][] copymap = new int[R][C];
            que.clear();
            for (int i = 0; i < R; i++) {
                for (int j = 0; j < C; j++) {
                    if (map[i][j] != 0 && map[i][j] != -1) {
                        que.add(new int[]{i, j});
                    }
                    copymap[i][j] = map[i][j];
                }
            }
            bfs(que,copymap);
            for (int t = 2; t < R - 2; t++) {
                if (map[t][0] != -1)
                    continue;
                if (first) {
                    first = false;
                    int pre = map[t][1];
                    map[t][1] = 0;
                    for (int i = 1; i < C - 1; i++) {
                        int next = map[t][i + 1];
                        map[t][i + 1] = pre;
                        pre = next;
                    }
                    for (int i = t; i > 0; i--) {
                        int next = map[i - 1][C - 1];
                        map[i - 1][C - 1] = pre;
                        pre = next;
                    }
                    for (int i = C - 1; i > 0; i--) {
                        int next = map[0][i - 1];
                        map[0][i - 1] = pre;
                        pre = next;
                    }
                    for (int i = 0; i < t; i++) {
                        int next = map[i + 1][0];
                        map[i + 1][0] = pre;
                        pre = next;
                    }
                    map[t][0] = -1;
                } else {
                    first = true;
                    int pre = map[t][1];
                    map[t][1] = 0;
                    for (int i = 1; i < C - 1; i++) {
                        int next = map[t][i + 1];
                        map[t][i + 1] = pre;
                        pre = next;
                    }
                    for (int i = t; i < R - 1; i++) {
                        int next = map[i + 1][C - 1];
                        map[i + 1][C - 1] = pre;
                        pre = next;
                    }
                    for (int i = C - 1; i > 0; i--) {
                        int next = map[R - 1][i - 1];
                        map[R - 1][i - 1] = pre;
                        pre = next;
                    }
                    for (int i = R - 1; i > t; i--) {
                        int next = map[i - 1][0];
                        map[i - 1][0] = pre;
                        pre = next;
                    }
                    map[t][0]=-1;
                }
            }
        }
        int sum = 0;
        for (int i = 0; i < R; i++) {
            for (int j = 0; j < C; j++) {
                sum += map[i][j];
            }
        }
        System.out.println(sum+2);
    }
    public static void bfs(Queue<int[]> que,int[][] copymap){
        while(!que.isEmpty()){
            int count = 0;
            int[] current = que.poll();
            int crow = current[0];
            int ccol = current[1];
            int temp = 0;
            for(int i = 0; i<4; i++){
                int nrow = crow + dr[i];
                int ncol = ccol + dc[i];
                if(nrow<0||ncol<0 ||nrow>=R||ncol>=C)
                    continue;
                if(map[nrow][ncol]==-1)
                    continue;
                temp += copymap[crow][ccol]/5;
                map[nrow][ncol] += copymap[crow][ccol]/5;
                count++;
            }
            if(count != 0){
                map[crow][ccol] -= temp ;
            }
        }
    }
}
어려운개념을 쓰는건 아닌거같은데 고려해야할 부분이 많고 여러가지 로직을 붙여놔서 구현하는데 오래걸렸다.