1 #include<cstring> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #include<iostream> 6 7 #define N 3007 8 9 #define Wb putchar(' ') 10 #define We putchar('\n') 11 #define rg register int 12 using namespace std; 13 inline int read() 14 { 15 int x=0,f=1;char ch=getchar(); 16 while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} 17 while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} 18 return x*f; 19 } 20 inline void write(int x) 21 { 22 if(x<0) putchar('-'),x=-x; 23 if (x==0) putchar(48); 24 int num=0;char c[15]; 25 while(x) c[++num]=(x%10)+48,x/=10; 26 while(num) putchar(c[num--]); 27 } 28 29 int D,S,n; 30 int ql,qr,qd,qu; 31 32 #define ls p<<1 33 #define rs p<<1|1 34 struct segx 35 { 36 int v[N],tag[N]; 37 void change(int p,int l,int r,int x,int y,int z) 38 { 39 v[p]=max(v[p],z); 40 if (l==x&&y==r){tag[p]=max(tag[p],z);return;} 41 int mid=(l+r)>>1; 42 if (y<=mid) change(ls,l,mid,x,y,z); 43 else if (x>mid) change(rs,mid+1,r,x,y,z); 44 else change(ls,l,mid,x,mid,z),change(rs,mid+1,r,mid+1,y,z); 45 } 46 int query(int p,int l,int r,int x,int y) 47 { 48 if (l==x&&y==r) return v[p]; 49 int mid=(l+r)>>1,res=tag[p]; 50 if (y<=mid) res=max(res,query(ls,l,mid,x,y)); 51 else if (x>mid) res=max(res,query(rs,mid+1,r,x,y)); 52 else res=max(res,max(query(ls,l,mid,x,mid),query(rs,mid+1,r,mid+1,y))); 53 return res; 54 } 55 }; 56 struct segy 57 { 58 segx v[N],tag[N]; 59 void change(int p,int l,int r,int x,int y,int z) 60 { 61 v[p].change(1,1,S,qd,qu,z); 62 if (l==x&&y==r){tag[p].change(1,1,S,qd,qu,z);return;} 63 int mid=(l+r)>>1; 64 if (y<=mid) change(ls,l,mid,x,y,z); 65 else if (x>mid) change(rs,mid+1,r,x,y,z); 66 else change(ls,l,mid,x,mid,z),change(rs,mid+1,r,mid+1,y,z); 67 } 68 int query(int p,int l,int r,int x,int y) 69 { 70 if (l==x&&y==r) return v[p].query(1,1,S,qd,qu); 71 int mid=(l+r)>>1,res=tag[p].query(1,1,S,qd,qu); 72 if (y<=mid) res=max(res,query(ls,l,mid,x,y)); 73 else if (x>mid) res=max(res,query(rs,mid+1,r,x,y)); 74 else res=max(res,max(query(ls,l,mid,x,mid),query(rs,mid+1,r,mid+1,y))); 75 return res; 76 } 77 }T; 78 #undef ls 79 #undef rs 80 81 int main() 82 { 83 D=read(),S=read(),n=read(); 84 rg d,s,w,x,y; 85 for (rg i=1;i<=n;i++) 86 { 87 d=read(),s=read(),w=read(),x=read(),y=read(); 88 ql=x+1,qr=x+d,qd=y+1,qu=y+s; 89 int ans=T.query(1,1,D,ql,qr); 90 T.change(1,1,D,ql,qr,ans+w); 91 } 92 qd=1,qu=S; 93 write(T.query(1,1,D,1,D)); 94 }