You are given a huge decimal number consisting of n digits. It is guaranteed that this number has no leading zeros. Each digit of this number is either 0 or 1.

You may perform several (possibly zero) operations with this number. During each operation you are allowed to change any digit of your number; you may change 0 to 1 or 1 to 0. It is possible that after some operation you can obtain a number with leading zeroes, but it does not matter for this problem.

You are also given two integers 0 ≤ y < x < n. Your task is to calculate the minimum number of operations you should perform to obtain the number that has remainder 10^y modulo 10^x. In other words, the obtained number should have remainder 10^y when divided by 10^x.

Input

The first line of the input contains three integers n, x, y (0 ≤ y < x < n ≤ 2 ⋅ 10^5) — the length of the number and the integers x and y, respectively.

The second line of the input contains one decimal number consisting of n digits, each digit of this number is either 0 or 1. It is guaranteed that the first digit of the number is 1.

Output

Print one integer — the minimum number of operations you should perform to obtain the number having remainder 10^y modulo 10^x. In other words, the obtained number should have remainder 10^y when divided by 10^x.

Examples

Input


11 5 2
11010100101


Output


1


Input


11 5 1
11010100101


Output


3

Note

In the first example the number will be 11010100100 after performing one operation. It has remainder 100 modulo 100000.

In the second example the number will be 11010100010 after performing three operations. It has remainder 10 modulo 100000.
// package Jobeel;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.math.*;
import java.util.Map.*;
public class codeforces {
      public static void main(String [] args) throws IOException, InterruptedException {
	    InputReader sc=new InputReader(System.in);
	    int n=sc.nextInt(),x=sc.nextInt(),y=sc.nextInt();
	    char [] ch=sc.next().toCharArray();
	    int i=n-1; int count=0;
	    for(int j=0;i>=0 & j<y;i--,j++) {
	    	if(ch[i]!='0') count++;
	    }
	    if(ch[i]!='1') count++;
	    i--;
	    for(int j=0;i>=0 & j<x-y-1;i--,j++) {
	    	if(ch[i]!='0') count++;
	    }
	    pw.print(count);
	    pw.flush();
		pw.close();
	}
    static int [] size,arr;
  	static int inv;
  	static long M=(long)1e9+9,P=999983;
  	static HashSet<StringBuilder> set_1;
  	static TreeSet<Long> set; 
  	
  	static int fix(int a,int k) {          // turn -% to +%
  		return (a%k+k)%k;
  	}
      static void solveBruteForece(int index , int mask) {
  		if(index==arr.length) {
  			long sum=0;
  			for(int i=0;i<arr.length;i++) {
  				if((mask & 1<<i)!=0) sum+=arr[i];
  				
  			}
  			set.add(sum);
  			return;
  		}
  		solveBruteForece(index+1,mask | 1<<index);
  		solveBruteForece(index+1,mask);
  	}
  	public static int find(int i) {
  		if(arr[i]==i) return i;
  		else {
  			int result=find(arr[i]);
  			arr[i]=result;
  			return result;
  		}
  	}
  public static void union(int u,int v) {
  		int root_u=find(u);
  		int root_v=find(v);
  		if (root_u==root_v) return;
  		else if(size[root_u]>size[root_v]) {
  			size[root_u]+=size[root_v];
  			arr[root_v]=root_u;
  		}else  {
  			size[root_v]+=size[root_u];
  			arr[root_u]=root_v;
  		}
  	}
      static int search(int x,int [] arr) {
      	int low=0,high=arr.length-1,ans=-1;
      	while(low<=high) {
      		int mid=(low+high)>>1;
      	   if(arr[mid]==x) { ans=mid; break;}
      	   else if(arr[mid]>x) high=mid-1;
      	   else low=mid+1;
      	}
      	return ans;
      }
     static  long gcd(long a, long b) 
      { 
          if (b == 0) 
              return a; 
          return gcd(b, a % b);  
            
      } 
     public static long largestDivisor(long n){
  	   long divisor = 0;
  	   long  w=n>>1;
  	   for (int i = 1; i <= w; i++)
  	       if (n % i == 0) 
  	           divisor = i;

  	   return divisor; 
  	}
    static int min (int x,int y,int z) {return Math.min(Math.min(x, y), z);}
    static long min (long x,long y,long z) {return Math.min(Math.min(x, y), z);}
    static int max (int x,int y,int z) {return Math.max(Math.max(x, y), z);}
    static long max (long x,long y,long z) {return Math.max(Math.max(x, y), z);}
	static class pair implements Comparable<pair>{
		String  name; int x,y,z ;
		
		
		public pair (int x,int y,int z) {
			this.x=x; this.y=y; this.z=z;
		}
		public int compareTo(pair o) {
			return o.z-z;
		}
		public String toString() {
			return x+" "+y+" "+z;
		}
	}

	static 	PrintWriter pw=new PrintWriter(System.out);
	
	static class InputReader  {
		 
		private InputStream in;
		private byte[] buffer = new byte[1024];
		private int curbuf;
		private int lenbuf;
 
		public InputReader(InputStream in) {
			this.in = in;
			this.curbuf = this.lenbuf = 0;
		}
 
		public boolean hasNextByte() {
			if (curbuf >= lenbuf) {
				curbuf = 0;
				try {
					lenbuf = in.read(buffer);
				} catch (IOException e) {
					throw new InputMismatchException();
				}
				if (lenbuf <= 0)
					return false;
			}
			return true;
		}
 
		private int readByte() {
			if (hasNextByte())
				return buffer[curbuf++];
			else
				return -1;
		}
 
		private boolean isSpaceChar(int c) {
			return !(c >= 33 && c <= 126);
		}
 
		private void skip() {
			while (hasNextByte() && isSpaceChar(buffer[curbuf]))
				curbuf++;
		}
 
		public boolean hasNext() {
			skip();
			return hasNextByte();
		}
 
		public String next() {
			if (!hasNext())
				throw new NoSuchElementException();
			StringBuilder sb = new StringBuilder();
			int b = readByte();
			while (!isSpaceChar(b)) {
				sb.appendCodePoint(b);
				b = readByte();
			}
			return sb.toString();
		}
 
		public int nextInt() {
			if (!hasNext())
				throw new NoSuchElementException();
			int c = readByte();
			while (isSpaceChar(c))
				c = readByte();
			boolean minus = false;
			if (c == '-') {
				minus = true;
				c = readByte();
			}
			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res = res * 10 + c - '0';
				c = readByte();
			} while (!isSpaceChar(c));
			return (minus) ? -res : res;
		}
 
		public long nextLong() {
			if (!hasNext())
				throw new NoSuchElementException();
			int c = readByte();
			while (isSpaceChar(c))
				c = readByte();
			boolean minus = false;
			if (c == '-') {
				minus = true;
				c = readByte();
			}
			long res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res = res * 10 + c - '0';
				c = readByte();
			} while (!isSpaceChar(c));
			return (minus) ? -res : res;
		}
 
		public double nextDouble() {
			return Double.parseDouble(next());
		}
 
		public int[] nextIntArray(int n) {
			int[] a = new int[n];
			for (int i = 0; i < n; i++)
				a[i] = nextInt();
			return a;
		}
 
		public long[] nextLongArray(int n) {
			long[] a = new long[n];
			for (int i = 0; i < n; i++)
				a[i] = nextLong();
			return a;
		}
 
	}

	}