#include<bits/stdc++.h>
using namespace std;
ifstream fin("demolish.in");
ofstream fout("demolish.out");
struct arbore{int cost;int poz;int tag;} aib[1500010];
struct punct{int st;int dr;int cost;};
vector<punct> v[500010];
int m,n,f,dx,dy,i,a1,b1,a2,b2,c;
void push_tag(int nod)
{
aib[nod*2].tag+=aib[nod].tag;
aib[nod*2+1].tag+=aib[nod].tag;
aib[nod*2].cost+=aib[nod].tag;
aib[nod*2+1].cost+=aib[nod].tag;
aib[nod].tag=0;
}
void update(int nod,int st,int dr,int x,int y,int cost)
{
if(x<=st&&dr<=y)
{
aib[nod].tag+=cost,aib[nod].cost+=cost;
return;
}
push_tag(nod);
int mid=(st+dr)/2;
if(mid>=x&&st<=y) update(nod*2,st,mid,x,y,cost);
if(dr>=x&&mid+1<=y) update(nod*2+1,mid+1,dr,x,y,cost);
if(aib[nod*2+1].cost<aib[nod*2].cost) aib[nod]=aib[nod*2+1];
else aib[nod]=aib[nod*2];
}
void build(int nod,int st,int dr)
{
if(st==dr){aib[nod].poz=st;return;}
push_tag(nod);
int mid=(st+dr)/2;
build(nod*2,st,mid);
build(nod*2+1,mid+1,dr);
if(aib[nod*2+1].cost<aib[nod*2].cost) aib[nod]=aib[nod*2+1];
else aib[nod]=aib[nod*2];
}
int main()
{
fin>>m>>n>>f>>dx>>dy;
build(1,0,m-dx);
for(i=1;i<=f;i++)
{
fin>>a1>>b1>>a2>>b2>>c;
v[b1+1].push_back({max(a1-dx+1,0),a2-1,c});
v[b2+dy].push_back({max(a1-dx+1,0),a2-1,-c});
fout<<max(a1-dx+1,0)<<" "<<b1+1<<" "<<a2-1<<" "<<b2+dy<<"\n";
}
fout<<"\n\n";
fout<<n-dy<<" "<<m-dx<<"\n\n";
for(i=0;i<=n;i++)
{
for(auto it:v[i]) update(1,0,m-dx,it.st,it.dr,it.cost);
if(i>=dy)
{
fout<<aib[i].cost<<" "<<i<<" "<<aib[i].poz<<"\n";
}
}
return 0;
}