import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); int a = in.nextInt(); int b = in.nextInt(); in.nextLine(); // 消耗换行符,避免读取字符串时出错 // 读取能力值和合作值的字符串数组,转成int数组 String[] abilityStr = in.nextLine().split(" "); String[] coorporationStr = in.nextLine().split(" "); int[] abilities = new int[n]; int[] coors = new int[n]; for (int i = 0; i < n; i++) { abilities[i] = Integer.parseInt(abilityStr[i]); coors[i] = Integer.parseInt(coorporationStr[i]); } // 1. 构建available数组:标记每个学生是否同时满足两个条件(1=满足,0=不满足) // 对满足条件的学生进行标记 int[] available = new int[n]; for (int i = 0; i < n; i++) { // 关键:必须“能力≥a 且 合作≥b”才标记为1 if (abilities[i] >= a && coors[i] >= b) { available[i] = 1; } else { available[i] = 0; } } // 2. 计算前缀和数组:prefixSum[i] = 前i个学生中满足条件的数量(prefixSum[0]=0) // 快速计算任意区间内满足条件的元素数量 int[] prefixSum = new int[n + 1]; for (int i = 0; i < n; i++) { prefixSum[i + 1] = prefixSum[i] + available[i]; } // 3. 滑动窗口:统计长度为k的区间中,满足条件的学生数=k的区间数量 int res = 0; // 区间[i, j-1](长度k):prefixSum[j] - prefixSum[i] = 满足条件的学生数 for (int i = 0, j = k; j <= n; i++, j++) { if (prefixSum[j] - prefixSum[i] == k) { res++; // 区间内所有k个学生都满足,计数+1 } } System.out.println(res); in.close(); } }