#include <bits/stdc++.h>

// #define int long long
using namespace std;

typedef pair<int, int> PII;
int const MAXN = 251000;
int n, m, T, k;
vector<PII> g[MAXN];
int res[1000][1000][25];

int get(int x, int y) { return x * m + y; }

void add(int a, int b, int c) {
    g[a].push_back({b, c});
}

int dfs(int u, int remain) {
    if (remain == 0) return 0;
    if (res[u / m][u % m][remain] != 0x3f3f3f3f) return res[u / m][u % m][remain];
    for (auto tmp: g[u]) {
        int j = tmp.first, w = tmp.second;
        res[u / m][u % m][remain] = min(dfs(j, remain - 2) + 2 * w, res[u / m][u % m][remain]);
    }
    return res[u / m][u % m][remain];
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m >> k;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m - 1; ++j) {
            int t;
            cin >> t;
            add(get(i, j), get(i, j + 1), t), add(get(i, j + 1), get(i, j), t);
        }
    }
    for (int i = 0; i < n - 1; ++i) {
        for (int j = 0; j < m; ++j) {
            int t;
            cin >> t;
            add(get(i, j), get(i + 1, j), t), add(get(i + 1, j), get(i, j), t);
        }
    }
    if (k % 2) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) cout << -1 << " ";
            cout << endl;
        }
        return 0;
    }
    memset(res, 0x3f, sizeof res);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            // res[i][j][k] = 0;
            dfs(get(i, j), k);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << res[i][j][k] << " ";
        }
        cout << endl;
    }
    return 0;
}