import java.util.Scanner;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int t = in.nextInt();
            int c = in.nextInt();

            ArrayList<Integer> arr = new ArrayList<Integer> ();
            ArrayList<Integer> dp = new ArrayList<Integer> ();
            
            dp.add(0);
            
            for(int i = 0; i < n; ++i) {
                arr.add(in.nextInt());
                dp.add(arr.get(i) + dp.get(i));
            }

            // 可以看出这是求出长度为c的子段和不超过t的个数
            // dp[i]是从第一个元素累加到第i个的和,dp[1]等于第一个元素的值!
            // dp[i] - dp[i - c] 即长度为c的区间和,复杂度O(n)

            int ans = 0;
            for(int i = c; i <= n; ++i) {
                if(dp.get(i) - dp.get(i - c) <= t) ++ans;
            }
            System.out.println(ans);
        }
    }
}

由于时间复杂度为O(n),故贪心可解,还可以进一步优化空间的思路:先计算一次从第一到第c个元素的区间和original_sum,然后使用一个临时变量维护每次左右区间端点右移一格的变化量delta,如果original_sum+delta <= t,则++ans,同样可解,空间复杂度降为O(1)