//Author : Storm
#include <bits/stdc++.h>
#define freopen(file) if(fopen(file ".inp", "r")) { freopen(file ".INP", "r", stdin); freopen(file ".OUT", "w", stdout); }
#define ll int
#define se second
#define fi first
using namespace std;
const int N = 3e5 + 5;
ll n, x, y, v1, v2, suf[N], A[N], B[N];
vector<pair<ll, ll> > a;

void input() {
    cin >> x >> y >> n;
    for(int i = 1; i <= n; i++) {
        cin >> v1 >> v2;
        a.push_back({v1, v2});
    }
}
int cur = 0;
vector<ll> mid;
void pre(ll ymin, ll ymax, vector<pair<ll, ll> >& a) {
    if(ymin >= ymax) {
        return;
    }
    vector<pair<ll, ll> > b;
    for(auto& p : a) {
        if(p.se >= ymax || p.se <= ymin)continue;
        b.push_back(p);
    }
    if(b.empty()) {
        return;
    }
    ll ymid = (int) b.size();
    if(ymid & 1)ymid /= 2;
    else ymid = ymid / 2 - 1;
    ymid = b[ymid].se;
    mid.push_back(ymid);
    vector<pair<ll, ll> > L, R;
    for(auto& p : b) {
        if(p.se <= ymid) {
            L.push_back(p);
        }
        else {
            R.push_back(p);
        }
    }
    pre(ymin, ymid, L);
    pre(ymid + 1, ymax, R);
}
ll calc(ll ymin, ll ymax, vector<pair<ll, ll> >& a) {
    if(ymin >= ymax) {
        return 0;
    }
    vector<pair<ll, ll> > b;
    for(auto& p : a) {
        if(p.se >= ymax || p.se <= ymin)continue;
        b.push_back(p);
    }
    if(b.empty()) {
        return 2 * (x + ymax - ymin);
    }
    vector<pair<ll, ll> > L, R;
    for(int i = b.size() - 1; i >= 0; i--) {
        if(b[i].fi <= x / 2) L.push_back(b[i]);
    }
    for(int i = 0; i < b.size(); i++) {
        if(b[i].fi > x / 2) R.push_back(b[i]);
    }
    ll ymid = mid[cur++];
    ll res = 0;
    int m = L.size(), j = 0;
    ll l = ymin, r = ymax;
    vector<pair<ll, pair<ll, ll> > > c, d;
    for(int i = j; i < m; i = j) {
        c.push_back({L[i].fi, {l, r}});
        while(j < m && L[j].fi == L[i].fi) {
            if(L[j].se <= ymid) {
                l = max(l, L[j].se);
            }
            else {
                r = min(r, L[j].se);
            }
            j++;
        }
    }
    c.push_back({0, {l, r}});
    m = R.size(), j = 0;
    l = ymin, r = ymax;
    for(int i = j; i < m; i = j) {
        d.push_back({R[i].fi, {l, r}});
        while(j < m && R[j].fi == R[i].fi) {
            if(R[j].se <= ymid) {
                l = max(l, R[j].se);
            }
            else {
                r = min(r, R[j].se);
            }
            j++;
        }
    }
    d.push_back({x, {l, r}});
    m = d.size();
    suf[m - 1] = d[m - 1].fi + d[m - 1].se.se - d[m - 1].se.fi;
    for(int i = m - 2; i >= 0; i--) {
        suf[i] = max(suf[i + 1], d[i].fi + d[i].se.se - d[i].se.fi);
    }
    for(int i = 0; i < m; i++) {
        A[i] = d[i].fi - d[i].se.fi;
        B[i] = d[i].fi + d[i].se.se;
    }
    int j1 = 0, j2 = 0;
    deque<int> dA, dB;
    int jA = 0, jB = 0;
    for(auto& cur : c) {
        while(j1 < m && d[j1].se.fi <= cur.se.fi)j1++;
        while(j2 < m && d[j2].se.se >= cur.se.se)j2++;
        while(jA < j2) {
            while(!dA.empty() && A[dA.back()] <= A[jA])dA.pop_back();
            dA.push_back(jA);
            jA++;
        }
        while(!dA.empty() && dA.front() < j1)dA.pop_front();
        while(jB < j1) {
            while(!dB.empty() && B[dB.back()] <= B[jB])dB.pop_back();
            dB.push_back(jB);
            jB++;
        }
        while(!dB.empty() && dB.front() < j2)dB.pop_front();
        int k = max(j1, j2);
        if(k < m) {
            res = max(res, 2 * (suf[k] - cur.fi));
        }
        k = min(j1 - 1, j2 - 1);
        if(k >= 0) {
            res = max(res, 2 * (d[k].fi - cur.fi + cur.se.se - cur.se.fi));
        }
        if(!dA.empty()) {
            res = max(res, 2 * (cur.se.se - cur.fi + A[dA.front()]));
        }
        if(!dB.empty()) {
            res = max(res, 2 * (-cur.se.fi - cur.fi + B[dB.front()]));
        }
    }
    L.clear();
    R.clear();
    for(auto& p : b) {
        if(p.se <= ymid) {
            L.push_back(p);
        }
        else {
            R.push_back(p);
        }
    }
    res = max({res, calc(ymin, ymid, L), calc(ymid + 1, ymax, R)});
    return res;
}
void solve() {
    sort(a.begin(), a.end(), [&] (pair<ll, ll> x, pair<ll, ll> y) {
        return x.se < y.se;
    });
    pre(0, y, a);
    sort(a.begin(), a.end(), [&] (pair<ll, ll> x, pair<ll, ll> y) {
        return x.fi < y.fi;
    });
    ll res = calc(0, y, a);
    swap(x, y);
    for(auto& p : a) {
        swap(p.fi, p.se);
    }
    sort(a.begin(), a.end(), [&] (pair<ll, ll> x, pair<ll, ll> y) {
        return x.se < y.se;
    });
    cur = 0;
    mid.clear();
    pre(0, y, a);
    sort(a.begin(), a.end(), [&] (pair<ll, ll> x, pair<ll, ll> y) {
        return x.fi < y.fi;
    });
    res = max(res, calc(0, y, a));
    cout << res;
}

/*

*/

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    freopen("HALFFILL");
    int t = 1;
    while(t--) {
        input();
        solve();
    }
    return 0;
}
