#include <iostream>
#include <vector>
#include <utility>
#include <complex>
using namespace std;
using W = double;
using P = complex<W>;
using L = pair<P,P>;

#define X real()
#define Y imag()

constexpr W EPS = 1e-8;

W cross(const P& a, const P& b){
  return a.X*b.Y - a.Y*b.X;
}

bool is_below(const L &l, const P &p){
  P d = l.second - l.first;
  P q = p - l.first;
  return cross(d,q) < EPS;
}

int main(){
  int n, m;
  W w, h, s;
  while(cin >> n >> m >> w >> h >> s, n){
    vector<L> lines;
    lines.emplace_back(P(0,0),P(w,0));

    vector<W> S(m+2,0);
    for(int i = 0; i < m; ++i){
      W l, r;
      cin >> l >> r;
      lines.emplace_back(P(0,l),P(w,r));
      S[i+1] = (l+r)/2*w;
    }

    lines.emplace_back(P(0,h),P(w,h));
    S[m+1] = w*h;

    for(int i = m+1; i > 0; --i) S[i] -= S[i-1];

    vector<int> C(m+2,0);
    for(int i = 0; i < n; ++i){
      W x, y;
      cin >> x >> y;
      P a(x,y);
      int ng = 0, ok = m+1;
      while(ok - ng > 1){
	int m = (ok+ng)/2;
	if(is_below(lines[m],a)){
	  ok = m;
	}else{
	  ng = m;
	}
      }
      ++C[ok];
      // cerr << i << " " << ok << endl;
    }

    double curS = 0, lim = h * w - s;
    int curA = 0, ub = 0, ans = n;
    for(int lb=0; lb<m+2; lb++) {
      while(ub < m+2 and (curS + S[ub] <= lim + EPS)) {
	curS += S[ub]; curA += C[ub];
	ub++;
      }
      // fprintf(stderr, "[%d, %d): curS = %.12f, curA = %d\n", lb, ub, curS, curA);
      ans = min(ans, n - curA);

      if(lb == ub) {
	ub++;
      }
      else {
	curS -= S[lb];
	curA -= C[lb];
      }
    }

    /*
    cerr << "S" << endl;
    for(auto s : S) cerr << s << " " ;
    cerr << endl;

    cerr << "C" << endl;
    for(auto c : C) cerr << c << " " ;
    cerr << endl;
    */
    cout << ans << endl;
  }
}

