There are n consecutive seat places in a railway carriage. Each place is either empty or occupied by a passenger.

The university team for the Olympiad consists of a student-programmers and b student-athletes. Determine the largest number of students from all a+b students, which you can put in the railway carriage so that:

  * no student-programmer is sitting next to the student-programmer; 
  * and no student-athlete is sitting next to the student-athlete. 



In the other words, there should not be two consecutive (adjacent) places where two student-athletes or two student-programmers are sitting.

Consider that initially occupied seat places are occupied by jury members (who obviously are not students at all).

Input

The first line contain three integers n, a and b (1 ≤ n ≤ 2⋅10^{5}, 0 ≤ a, b ≤ 2⋅10^{5}, a + b > 0) — total number of seat places in the railway carriage, the number of student-programmers and the number of student-athletes.

The second line contains a string with length n, consisting of characters "." and "*". The dot means that the corresponding place is empty. The asterisk means that the corresponding place is occupied by the jury member.

Output

Print the largest number of students, which you can put in the railway carriage so that no student-programmer is sitting next to a student-programmer and no student-athlete is sitting next to a student-athlete.

Examples

Input

5 1 1
*...*


Output

2


Input

6 2 3
*...*.


Output

4


Input

11 3 10
.*....**.*.


Output

7


Input

3 2 3
***


Output

0

Note

In the first example you can put all student, for example, in the following way: *.AB*

In the second example you can put four students, for example, in the following way: *BAB*B

In the third example you can put seven students, for example, in the following way: B*ABAB**A*B

The letter A means a student-programmer, and the letter B — student-athlete.
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.io.FilterInputStream;
import java.util.Comparator;
import java.util.Collections;
import java.io.InputStream;

/**
 * @author Jenish
 */
public class Main {
    public static void main(String[] ARGS) {
        new Thread(null, new Runnable() {
            public void run() {
                new Main().solve();
            }
        }, "1", 1 << 26).start();
    }

    void solve() {
        InputStream IS = System.in;
        OutputStream OS = System.out;
        ScanReader in = new ScanReader(IS);
        PrintWriter out = new PrintWriter(OS);
        TaskB taskb = new TaskB();
        taskb.solve(1, in, out);
        out.close();
    }

    static class TaskB {
        public void solve(int testNumber, ScanReader in, PrintWriter out) {
            int n = in.scanInt();
            int a = in.scanInt();
            int b = in.scanInt();
            String str = in.scanString();
            int t = 0;
            long ans = 0;

            ArrayList<Integer> arrayList = new ArrayList<>();
            for (int i = 0; i < str.length(); i++) {
                if (str.charAt(i) == '*') {
                    continue;
                }
                if (str.charAt(i) == '.') ;
                int temp = 0;
                while (i < n && str.charAt(i) == '.') {
                    temp++;
                    i++;
                }
                if (temp != 0) {
                    arrayList.add(temp);
                }
            }


            Collections.sort(arrayList, new Comparator<Integer>() {

                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });


            for (int i = 0; i < arrayList.size(); i++) {
                int temp = arrayList.get(i);
                if (temp % 2 == 0) {
                    int t1 = temp / 2;
                    if (a >= t1) {
                        ans += t1;
                        a = a - t1;
                    } else {
                        ans += a;
                        a = 0;
                    }
                    if (b >= t1) {
                        ans += t1;
                        b = b - t1;
                    } else {
                        ans += b;
                        b = 0;
                    }
                } else {
                    int t1 = temp / 2 + 1;
                    int t2 = temp / 2;
                    if (a > b) {
                        if (a >= t1) {
                            ans += t1;
                            a = a - t1;
                        } else {
                            ans += a;
                            a = 0;
                        }
                        if (b >= t2) {
                            ans += t2;
                            b = b - t2;
                        } else {
                            ans += b;
                            b = 0;
                        }
                    } else {
                        if (a >= t2) {
                            ans += t2;
                            a = a - t2;
                        } else {
                            ans += a;
                            a = 0;
                        }
                        if (b >= t1) {
                            ans += t1;
                            b = b - t1;
                        } else {
                            ans += b;
                            b = 0;
                        }
                    }

                }

            }


            out.println(ans);

        }

    }

    static class ScanReader {
        private byte[] buf = new byte[4 * 1024];
        private int index;
        private BufferedInputStream in;
        private int Total_Char;

        public ScanReader(InputStream inputStream) {
            in = new BufferedInputStream(inputStream);
        }

        private int scan() {
            if (index >= Total_Char) {
                index = 0;
                try {
                    Total_Char = in.read(buf);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (Total_Char <= 0) return -1;
            }
            return buf[index++];
        }

        public int scanInt() {
            int integer = 0;
            int n = scan();
            while (isWhiteSpace(n)) n = scan();
            int neg = 1;
            if (n == '-') {
                neg = -1;
                n = scan();
            }
            while (!isWhiteSpace(n)) {
                if (n >= '0' && n <= '9') {
                    integer *= 10;
                    integer += n - '0';
                    n = scan();
                }
            }
            return neg * integer;
        }

        public String scanString() {
            int c = scan();
            while (isWhiteSpace(c)) c = scan();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = scan();
            } while (!isWhiteSpace(c));
            return res.toString();
        }

        private boolean isWhiteSpace(int n) {
            if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1) return true;
            else return false;
        }

    }
}

