#include <iostream>
#include <vector>
#include <cmath>
#include <deque>
using namespace std;

// (a+b)%m = (a%m + b%m)%m
// (a*b)%m == ((a%m)*(b%m))%m
// 令 a=m+p,b=m+q
// ab = m^2 + m(p+q) + pq
// (ab)%m = (m^2 + m(p+q) + pq)%m = (pq)%m
// (P^n)%(p-1) = (p%(p-1)*p%(p-1)*...)%(p-1) = 1

// 3维bsf参考网友的示例,c的值在0~p-2之间,x,y,c确定的情况下,四方向的c也是确定的,所以使用3维地图
int main() {
    int n, m, p;
    cin >> n >> m >> p;
    vector<vector<int>> a(n,vector<int>(m));
    vector<vector<int>> b(n,vector<int>(m));
    vector<vector<int>> c(n,vector<int>(m));
    vector<vector<vector<int>>> map(n,vector<vector<int>>(m,vector<int>(p-1,-1)));

    for(auto map : {&a,&b}) {
        for(auto& vec : *map) {
            for(auto& v : vec) {
                cin >> v;
            }
        }
    }
    auto px = p-1;
    for(auto i = 0; i < n; i++) {
        for(auto j = 0; j < m; j++) {
            c[i][j] = a[i][j]%px;
        }
    }
    // for(auto& vec : c) {
    //     for(auto v :vec) {
    //         cout << v << " ";
    //     }
    //     cout << endl;
    // }
    vector<pair<int,int>> round = {
        {0,1},{0,-1},{1,0},{-1,0}
    };
    deque<vector<int>> dq;
    dq.push_back({0,0,c[0][0]});
    map[0][0][c[0][0]] = 0;
    while(dq.size()) {
        auto vec = dq.front();
        dq.pop_front();
        auto step = map[vec[0]][vec[1]][vec[2]];        
        for(auto& off : round) {
            int y = vec[0] + off.first;
            int x = vec[1] + off.second;
            if(x < 0 || y < 0 || x >= m || y >= n) {
                continue;
            }
            int q = (vec[2] + c[y][x])%px;
            if(map[y][x][q] != -1) {
                continue;
            }
            map[y][x][q] = step + 1;
            if(y == n-1 && x == m - 1 && q == 0) {
                cout << step + 1 << endl;
                return 0;
            }
            dq.push_back({y,x,q});
        }
    }
    // for(auto k = 0; k < px; k++) {
    //     cout << "{: " << k << endl;
    //     for(auto i = 0; i < n; i++) {
    //         for(auto j = 0; j < m; j++) {
    //             cout << map[i][j][k] << " ";
    //         }
    //         cout << endl;
    //     }
    //     cout << "}" << endl;
    // }
    cout << map[n-1][m-1][0] << endl;
}
// 64 位输出请用 printf("%lld")