#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,t;
struct TREE{
int mx,tag;
bool exist;
}tree[N*16];
inline int get_son(int nw,int to)
{
return nw*4-2+to;
}
inline void build(int x,int lft,int rht,int up,int down)
{
if(lft>rht||up>down)
return;
tree[x].exist=1;
tree[x].tag=-1;
if(lft==rht&&up==down)
return;
build(get_son(x,0),lft,(lft+rht)/2,up,(up+down)/2);
build(get_son(x,1),(lft+rht)/2+1,rht,up,(up+down)/2);
build(get_son(x,2),lft,(lft+rht)/2,(up+down)/2+1,down);
build(get_son(x,3),(lft+rht)/2+1,rht,(up+down)/2+1,down);
return;
} //预处理边界
inline void update(int x)
{
tree[x].mx=max(tree[x].mx,max(max(tree[get_son(x,0)].mx,tree[get_son(x,1)].mx),max(tree[get_son(x,2)].mx,tree[get_son(x,3)].mx)));
return;
}
inline void pushdown(int x)
{
if(tree[x].tag!=-1)
{
tree[get_son(x,0)].mx=tree[get_son(x,0)].tag=tree[x].tag;
tree[get_son(x,1)].mx=tree[get_son(x,1)].tag=tree[x].tag;
tree[get_son(x,2)].mx=tree[get_son(x,2)].tag=tree[x].tag;
tree[get_son(x,3)].mx=tree[get_son(x,3)].tag=tree[x].tag;
tree[x].tag=-1;
}
return;
}
inline int get(int x,int lft,int rht,int up,int down,int lft1,int rht1,int up1,int down1)
{
if(tree[x].exist==0)
return 0;
if(rht<lft1||lft>rht1||down<up1||up>down1)
return 0;
if(lft>=lft1&&rht<=rht1&&up>=up1&&down<=down1)
return tree[x].mx;
pushdown(x);
int s=0;
s=max(s,get(get_son(x,0),lft,(lft+rht)/2,up,(up+down)/2,lft1,rht1,up1,down1));
s=max(s,get(get_son(x,1),(lft+rht)/2+1,rht,up,(up+down)/2,lft1,rht1,up1,down1));
s=max(s,get(get_son(x,2),lft,(lft+rht)/2,(up+down)/2+1,down,lft1,rht1,up1,down1));
s=max(s,get(get_son(x,3),(lft+rht)/2+1,rht,(up+down)/2+1,down,lft1,rht1,up1,down1));
update(x);
return s;
}
inline void change(int x,int lft,int rht,int up,int down,int lft1,int rht1,int up1,int down1,int to)
{
if(rht<lft1||lft>rht1||down<up1||up>down1)
return;
if(lft>=lft1&&rht<=rht1&&up>=up1&&down<=down1)
{
tree[x].mx=tree[x].tag=to;
return;
}
pushdown(x);
if(tree[get_son(x,0)].exist==1)
change(get_son(x,0),lft,(lft+rht)/2,up,(up+down)/2,lft1,rht1,up1,down1,to);
if(tree[get_son(x,1)].exist==1)
change(get_son(x,1),(lft+rht)/2+1,rht,up,(up+down)/2,lft1,rht1,up1,down1,to);
if(tree[get_son(x,2)].exist==1)
change(get_son(x,2),lft,(lft+rht)/2,(up+down)/2+1,down,lft1,rht1,up1,down1,to);
if(tree[get_son(x,3)].exist==1)
change(get_son(x,3),(lft+rht)/2+1,rht,(up+down)/2+1,down,lft1,rht1,up1,down1,to);
update(x);
return;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m>>t;
build(1,1,m,1,n);
for(int i=1;i<=t;i++)
{
int d,s,w,x,y;
cin>>d>>s>>w>>x>>y;
int lst=get(1,1,m,1,n,x+1,x+d,y+1,y+s);
change(1,1,m,1,n,x+1,x+d,y+1,y+s,lst+w);
}
cout<<tree[1].mx<<'\n';
return 0;
}