#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e5+10;
int n,m,w,h,ch[N][2];
struct node{
int l,r,d,u,x,y,id;
}tr[N];
bool cmpx(node x,node y){
return x.x<y.x || x.x==y.x && x.y<y.y;
}
bool cmpy(node x,node y){
return x.y<y.y || x.y==y.y && x.x<y.x;
}
int head[N],tot=0;
struct edge{
int to,nxt,val;
}mp[N*40];
void add(int x,int y,int z){
mp[++tot]=edge{y,head[x],z};
head[x]=tot;
}
void pushup(int x){
tr[x].l=min({tr[ch[x][0]].l,tr[ch[x][1]].l,tr[x].x});
tr[x].r=max({tr[ch[x][0]].r,tr[ch[x][1]].r,tr[x].x});
tr[x].d=min({tr[ch[x][0]].d,tr[ch[x][1]].d,tr[x].y});
tr[x].u=max({tr[ch[x][0]].u,tr[ch[x][1]].u,tr[x].y});
}
int build(int l,int r,int o){
if(l>r) return 0;
int x=(l+r)/2;
nth_element(tr+l,tr+x,tr+r+1,o?cmpx:cmpy);
ch[x][0]=build(l,x-1,o^1);
ch[x][1]=build(x+1,r,o^1);
if(ch[x][0]) add(x,ch[x][0],0);
if(ch[x][1]) add(x,ch[x][1],0);
pushup(x);
return x;
}
void link(int x,int L,int R,int D,int U,int p,int t){
if(x==0 || tr[x].l>R || tr[x].r<L || tr[x].d>U || tr[x].u<D) return;
if(tr[x].l>=L && tr[x].r<=R && tr[x].d>=D && tr[x].u<=U){
add(p,x,t);
return;
}
if(tr[x].x>=L && tr[x].x<=R && tr[x].y>=D && tr[x].y<=U) add(p,x+n,t);
link(ch[x][0],L,R,D,U,p,t);
link(ch[x][1],L,R,D,U,p,t);
}
int vis[N],pos[N];
int d[N];
int main(){
cin>>n>>m>>w>>h;
for(int i=1;i<=n;i++){
cin>>tr[i].x>>tr[i].y;
tr[i].id=i;
add(i,i+n,0);
}
tr[0]={inf,-inf,inf,-inf,0,0,0};
int rt=build(1,n,0);
for(int i=1;i<=n;i++) pos[tr[i].id]=i;
while(m--){
int p,t,L,R,D,U;
cin>>p>>t>>L>>R>>D>>U;
link(rt,L,R,D,U,pos[p]+n,t);
}
priority_queue<pair<ll,int> > q;
int s=pos[1]+n;
q.push(make_pair(0,s));
memset(d,0x3f,sizeof(d));
d[s]=0;
while(q.size()){
int x=q.top().second; q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=mp[i].nxt){
int u=mp[i].to,v=mp[i].val;
if(vis[u] || d[u]<=d[x]+v) continue;
d[u]=d[x]+v;
q.push(make_pair(-d[u],u));
}
}
for(int i=2;i<=n;i++) cout<<d[pos[i]+n]<<"\n";
return 0;
}