#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 30010
#define eps 1e-10
struct Nodes{
	double l,r;
}line[maxn];
struct Point{
	double x,y;
}p[maxn];
int n,m,w,h;
int S;
int sum[maxn],pos[maxn];
double area[maxn];
double cross(Point a,Point b,Point c)
{
	double dx1=b.x-a.x,dx2=c.x-a.x,dy1=b.y-a.y,dy2=c.y-a.y;
	return dx1*dy2-dy1*dx2;
}
int check(int id,int now)
{
	Point a,b,c;
	a.x=0;a.y=line[id].l;
	b.x=w;b.y=line[id].r;
	c=p[now];
	if(cross(a,c,b)>0)return 1;
	return 0;
}
double Area(int id1,int id2)
{
	return (line[id2].l-line[id1].l+line[id2].r-line[id1].r)*w/2.0;
}
int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
	int i,j,k;
	int L,R,mid;
	int ans;
	while(scanf("%d%d%d%d%d",&n,&m,&w,&h,&S),n||m||w||h||S){
		for(i=1;i<=m;i++){
			scanf("%lf%lf",&line[i].l,&line[i].r);
		}
		for(i=1;i<=n;i++){
			scanf("%lf%lf",&p[i].x,&p[i].y);
		}
		memset(sum,0,sizeof(sum));
		sum[0]=0;
		line[0].l=line[0].r=0;
		for(i=1;i<=n;i++){
			L=0;R=m;
			while(L<=R){
				mid=(L+R)/2;
				if(check(mid,i)){
					pos[i]=mid;
					R=mid-1;
				}else L=mid+1;
			}
			sum[pos[i]]++;
		}
		area[0]=0;
		for(i=1;i<=m;i++){
			sum[i]+=sum[i-1];
			area[i]=area[i-1]+Area(i-1,i);
		}
		if(S==0){
			printf("0\n");
			continue;
		}
		if(S==w*h){
		    printf("%d\n",n);
		    continue;
		}
		S=w*h-S;
		ans=n;
		for(i=1;i<=m;i++){
			//if(area[i]>S-eps){
				
				k=lower_bound(area,area+m+1,area[i]-S-eps)-area;
				//printf("%d %lf %d %d %d\n",i,area[i],k,sum[k-1],sum[i]);
				ans=min(ans,n-sum[i]+sum[k]);
			//}
		}
		printf("%d\n",ans);
	}
	return 0;
}