#include <bits/stdc++.h>

#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define int long long
#define pii pair<int,int>
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)

using namespace std;

const int INF = (int)1e18 + 462010;
const int MAX_N = 1e5;

int n, m, k, W;
vector<int> cnt, s1, s2, u;
vector<array<int, 4>> rec;

int id(int i, int j){
    return i * W + j;
}

void upd(int r, int c, int sg, int x){
    int p = id(r, c);
    cnt[p] += sg;
    s1[p] += sg * x;
    s2[p] += sg * x * x;
}

void Input(){
    cin >> n >> m >> k;
    rec.resize(k + 1);
    FOR(i, 1, k){
        cin >> rec[i][0] >> rec[i][1] >> rec[i][2] >> rec[i][3];
    }
}

void Prepare(){
    W = m + 2;
    int tot = (n + 2) * W;
    cnt.assign(tot, 0);
    s1.assign(tot, 0);
    s2.assign(tot, 0);
    u.assign(k + 1, 0);

    FOR(i, 1, k){
        int r1 = rec[i][0], c1 = rec[i][1], r2 = rec[i][2], c2 = rec[i][3];
        upd(r1, c1, 1, i);
        upd(r1, c2 + 1, -1, i);
        upd(r2 + 1, c1, -1, i);
        upd(r2 + 1, c2 + 1, 1, i);
    }

    FOR(i, 1, n) FOR(j, 1, m){
        int p = id(i, j);
        int a = id(i - 1, j), b = id(i, j - 1), c = id(i - 1, j - 1);
        cnt[p] += cnt[a] + cnt[b] - cnt[c];
        s1[p] += s1[a] + s1[b] - s1[c];
        s2[p] += s2[a] + s2[b] - s2[c];
    }
}

void Solve(){
    int T = 0;
    vector<int> prs;

    FOR(i, 1, n) FOR(j, 1, m){
        int p = id(i, j);
        if(cnt[p] >= 1) T++;

        if(cnt[p] == 1){
            u[s1[p]]++;
        }
        else if(cnt[p] == 2){
            int s = s1[p], q = s2[p];
            int d2 = 2 * q - s * s;
            int d = (int)sqrtl((long double)d2);
            while(d * d > d2) d--;
            while((d + 1) * (d + 1) <= d2) d++;
            int x = (s - d) / 2, y = (s + d) / 2;
            prs.pb(x * (k + 1) + y);
        }
    }

    sort(all(prs));

    vector<int> keys, ws;
    for(int i = 0; i < sz(prs); ){
        int j = i;
        while(j < sz(prs) && prs[j] == prs[i]) j++;
        keys.pb(prs[i]);
        ws.pb(j - i);
        i = j;
    }

    int best = INF;

    FOR(t, 0, sz(keys) - 1){
        int x = keys[t] / (k + 1), y = keys[t] % (k + 1);
        best = min(best, u[x] + u[y] + ws[t]);
    }

    vector<int> ord(k);
    iota(all(ord), 1);
    sort(all(ord), [&](int a, int b){
        return u[a] < u[b];
    });

    FOR(a, 0, k - 1){
        bool found = false;
        FOR(b, a + 1, k - 1){
            int x = min(ord[a], ord[b]), y = max(ord[a], ord[b]);
            int code = x * (k + 1) + y;
            if(!binary_search(all(keys), code)){
                best = min(best, u[x] + u[y]);
                found = true;
                break;
            }
        }
        if(!found && a + 1 >= k) break;
    }

    cout << T - best << el;
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    Input();
    Prepare();
    Solve();

    return 0;
}