public static void main(String args[]) throws Throwable {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		for (String ln;(ln=in.readLine())!=null;) {
			StringTokenizer st=new StringTokenizer(ln);
			int n=parseInt(st.nextToken()),m=parseInt(st.nextToken()),s=parseInt(st.nextToken()),v=parseInt(st.nextToken());
			double[][] gopher=new double[n][];
			double[][] holes=new double[m][];
			for(int i=0;i<n;i++) {
				st=new StringTokenizer(in.readLine());
				gopher[i]=new double[]{Double.parseDouble(st.nextToken()),Double.parseDouble(st.nextToken())};
			}
			for(int i=0;i<m;i++) {
				st=new StringTokenizer(in.readLine());
				holes[i]=new double[]{Double.parseDouble(st.nextToken()),Double.parseDouble(st.nextToken())};
			}
			int[][] cap=new int[n+m+2][n+m+2];
			ArrayList<Integer> [] lAdy=new ArrayList[n+m+2];
			for(int i=0;i<n+m+2;i++)lAdy[i]=new ArrayList<Integer>();
			for(int i=0;i<n;i++)
				for(int j=0;j<m;j++) {
					if(dist(gopher[i],holes[j])/v<=s) {
						cap[i][j+n]=1;
						lAdy[i].add(j+n);
						lAdy[j+n].add(i);
					} 
				}
			for(int i=0;i<n;i++) {
				cap[n+m][i]=1;
				lAdy[n+m].add(i);
				lAdy[i].add(n+m);
			}
			for(int j=0;j<m;j++) {
				cap[n+j][n+m+1]=1;
				lAdy[n+j].add(n+m+1);
				lAdy[n+m+1].add(n+j);
			}
			sb.append(n-maxFlow(cap,n+m,n+m+1,n+m+2,lAdy)).append("\n");
		}
		System.out.print(new String(sb));
	}