The prison of your city has n prisoners. As the prison can't accommodate all of them, the city mayor has decided to transfer c of the prisoners to a prison located in another city.

For this reason, he made the n prisoners to stand in a line, with a number written on their chests. The number is the severity of the crime he/she has committed. The greater the number, the more severe his/her crime was.

Then, the mayor told you to choose the c prisoners, who will be transferred to the other prison. He also imposed two conditions. They are,

  * The chosen c prisoners has to form a contiguous segment of prisoners. 
  * Any of the chosen prisoner's crime level should not be greater then t. Because, that will make the prisoner a severe criminal and the mayor doesn't want to take the risk of his running away during the transfer. 



Find the number of ways you can choose the c prisoners.

Input

The first line of input will contain three space separated integers n (1 ≤ n ≤ 2·105), t (0 ≤ t ≤ 109) and c (1 ≤ c ≤ n). The next line will contain n space separated integers, the ith integer is the severity ith prisoner's crime. The value of crime severities will be non-negative and will not exceed 109. 

Output

Print a single integer — the number of ways you can choose the c prisoners.

Examples

Input

4 3 3
2 3 1 1


Output

2


Input

1 1 1
2


Output

0


Input

11 4 2
2 2 0 7 3 2 2 4 9 1 4


Output

6
import java.io.*;
import java.math.BigInteger;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;
 
public class solver implements Runnable {
        final boolean ONLINE_JUDGE = System.getProperty("ONLINE_JUDGE") != null;
        BufferedReader in;
        PrintWriter out;
        StringTokenizer tok = new StringTokenizer("");
        
        String readString() throws IOException{
                while(!tok.hasMoreTokens()){
                        try{
                                tok = new StringTokenizer(in.readLine());
                        }catch (Exception e){
                                return null;
                        }
                }
                return tok.nextToken();
        }
        String readString(String delim) throws IOException{
            while(!tok.hasMoreTokens()){
                    try{
                            tok = new StringTokenizer(in.readLine());
                    }catch (Exception e){
                            return null;
                    }
            }
            return tok.nextToken(delim);
    }
       
        int readInt() throws IOException{
                return Integer.parseInt(readString());
        }  
        long readLong() throws IOException{
                return Long.parseLong(readString());
        }      
        double readDouble() throws IOException{
                return Double.parseDouble(readString());
        } 
        char readChar() throws IOException {
            char val = 0;
            do{
                val = (char) in.read();
            }while(val == '\n' || val == '\r');
            return val;
        }
        char readChar(String skipChars)throws IOException{
            char val = 0;
            boolean ret;
            do{
                val = (char) in.read();
                ret = false;
                for (int i = skipChars.length()-1; i >= 0; i--){
                    if (skipChars.charAt(i) == val){
                        ret = true;
                        break;
                    }
                }
            }while(ret);
            return val;
        }
        
        public class Pair<T1,T2> {
            public T1 x1;
            public T2 x2;
            public Pair(){};
            public Pair(T1 x1, T2 x2){
                this.x1 = x1;
                this.x2 = x2;
            }
            public String toString(){
                return x1.toString() + " " + x2.toString();
            }
        }
        public class Point implements Comparable<Point>{
            public int x1, x2;
            public Point(){}
            public Point(int a, int b){x1 = a;x2=b;}
            public int compareTo(Point o) {
                return x1-o.x1;
            }
            public String toString(){
                return x1 + " " + x2;
            }
        }
//----------------------------------------        
        
        public void solve() throws IOException {
            int n = readInt();
            int t = readInt();
            int c = readInt();
            doo = new int[4*n];
            int[] arr = new int[n];
            for (int i  =0 ; i < n; i++){
                update(1, i, readInt(), 0, n-1);
            }
            int ans = 0;
            for (int i = 0; i + c -1 < n; i++){
                int m = get(1, i, i+c -1, 0, n-1);
                if (m <= t){
                    ans++;
                }
            }
            out.print(ans);
        }
        
        
//----------------------------------------
        public static void main(String[] args){
                new Thread(null, new solver(), "", 256 * (1L << 20)).start();
        }
       
        public void run(){
                try{
                        timeBegin = System.currentTimeMillis();
                        
                        if (ONLINE_JUDGE){
                            in = new BufferedReader(new InputStreamReader(System.in));
                            out = new PrintWriter(System.out);
                        } 
                        else {
                            in = new BufferedReader(new FileReader("input.txt"));
                            out = new PrintWriter("output.txt");
                        }
                        
                        solve();
                        out.close();
                        
                        timeEnd = System.currentTimeMillis();
                        System.err.println("Time = " + (timeEnd - timeBegin));
                }catch (Exception e){
                        e.printStackTrace(System.err);
                        System.exit(-1);
                }
        }
       
        long timeBegin, timeEnd;
 
        
//-------ДЕРЕВО ОТРЕЗКОВ       
        int[] doo;
        
        void update(int v, int i, int val, int ll, int rr){
            if (ll == rr){
                doo[v] = val;
            }else{
                int med = ll + (rr-ll)/2;
                
                if (i <= med){
                    update(2*v, i, val, ll, med);
                }else{
                    update(2*v+1, i, val, med+1, rr);
                }
                doo[v] = max(doo[2*v],doo[2*v+1]);
            }
        }
        int get(int v, int l, int r, int ll, int rr){
            if (l > r){
                return 0;
            }
            if (ll == l && r == rr){
                return doo[v];
            }
            int med = ll +(rr-ll)/2;
            return max(get(2*v, l, min(r, med), ll, med), 
                    get(2*v+1, max(l, med+1), r, med+1, rr));
        }
 //----------------------------------------         
}