#include <stdio.h>
#include <algorithm>
#include <string.h>
#define il inline
#define mk make_pair
#define f first
#define s second
#define N 300004
using namespace std;

int w,h,n,ans,t1,t2;
pair<int,int> p[N],st1[N],st2[N];
int t[4*N],add[4*N];

il char gc()
{
	static char now[1<<20],*S,*T;
	if (T==S)
	{
		T=(S=now)+fread(now,1,1<<20,stdin);
		if (T==S) return EOF;
	}
	return *S++;
}

il int read()
{
	int res=0;
	char c;
	while ((c=getchar())<'0'||c>'9');
	res=(c^48);
	while ((c=getchar())>='0'&&c<='9') res=(res<<3)+(res<<1)+(c^48);
	return res;
}

il void pushdown(int k)
{
	add[k<<1]+=add[k],add[k<<1|1]+=add[k];
	t[k<<1]+=add[k],t[k<<1|1]+=add[k];
	add[k]=0;
}

il void uptqj(int k,int l,int r,int x,int y,int v)
{
	if (l>=x&&r<=y){add[k]+=v,t[k]+=v;return;}
	int mid=(l+r)>>1;
	pushdown(k);
	if (x<=mid) uptqj(k<<1,l,mid,x,y,v);
	if (y>mid) uptqj(k<<1|1,mid+1,r,x,y,v);
	t[k]=max(t[k<<1],t[k<<1|1]);
}

il void solve()
{
    sort(p+1,p+n+1),t1=t2=0;
    int i,last;
    for (i=1; i<=4*n; i++) t[i]=add[i]=0;
    
    for (i=1; i<=n; i++)
	{
        if (p[i].s<=h/2)
		{
            for (last=i-1; t1&&st1[t1].s<p[i].s; last=st1[t1--].f-1)
            	uptqj(1,1,n,st1[t1].f,last,st1[t1].s-p[i].s);
            if (last!=i-1) st1[++t1]=mk(last+1,p[i].s);
        }
		else
		{
			for (last=i-1; t2&&st2[t2].s>p[i].s; last=st2[t2--].f-1)
            	uptqj(1,1,n,st2[t2].f,last,p[i].s-st2[t2].s);
            if (last!=i-1) st2[++t2]=mk(last+1,p[i].s);
        }
        st1[++t1]=mk(i,0),st2[++t2]=mk(i,h);
        uptqj(1,1,n,i,i,h-p[i].f),ans=max(ans,t[1]+p[i+1].f);
    }
}

int main()
{
    w=read(),h=read(),n=read();
    int i;
    for (i=1; i<=n; i++) p[i].f=read(),p[i].s=read();
    p[++n]=mk(0,0),p[++n]=mk(w,h);
    
    solve();
	for (i=1; i<=n; i++) swap(p[i].f,p[i].s);
    swap(w,h),solve(),printf("%d",2*ans);
    
    return 0;
}