Problem: Dark Assembly is a governing body in the Netherworld. Here sit the senators who take the most important decisions for the player. For example, to expand the range of the shop or to improve certain characteristics of the character the Dark Assembly's approval is needed.

The Dark Assembly consists of n senators. Each of them is characterized by his level and loyalty to the player. The level is a positive integer which reflects a senator's strength. Loyalty is the probability of a positive decision in the voting, which is measured as a percentage with precision of up to 10%. 

Senators make decisions by voting. Each of them makes a positive or negative decision in accordance with their loyalty. If strictly more than half of the senators take a positive decision, the player's proposal is approved. 

If the player's proposal is not approved after the voting, then the player may appeal against the decision of the Dark Assembly. To do that, player needs to kill all the senators that voted against (there's nothing wrong in killing senators, they will resurrect later and will treat the player even worse). The probability that a player will be able to kill a certain group of senators is equal to A / (A + B), where A is the sum of levels of all player's characters and B is the sum of levels of all senators in this group. If the player kills all undesired senators, then his proposal is approved.

Senators are very fond of sweets. They can be bribed by giving them candies. For each received candy a senator increases his loyalty to the player by 10%. It's worth to mention that loyalty cannot exceed 100%. The player can take no more than k sweets to the courtroom. Candies should be given to the senators before the start of voting.

Determine the probability that the Dark Assembly approves the player's proposal if the candies are distributed among the senators in the optimal way.

Input

The first line contains three integers n, k and A (1 ≤ n, k ≤ 8, 1 ≤ A ≤ 9999).

Then n lines follow. The i-th of them contains two numbers — bi and li — the i-th senator's level and his loyalty.

The levels of all senators are integers in range from 1 to 9999 (inclusive). The loyalties of all senators are integers in range from 0 to 100 (inclusive) and all of them are divisible by 10.

Output

Print one real number with precision 10 - 6 — the maximal possible probability that the Dark Assembly approves the player's proposal for the best possible distribution of candies among the senators.

Examples

Input

5 6 100
11 80
14 90
23 70
80 30
153 70


Output

1.0000000000


Input

5 3 100
11 80
14 90
23 70
80 30
153 70


Output

0.9628442962


Input

1 3 20
20 20


Output

0.7500000000

Note

In the first sample the best way of candies' distribution is giving them to first three of the senators. It ensures most of votes.

It the second sample player should give all three candies to the fifth senator.

Solution (in JAVA):

Solution:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.InputStream;
import java.io.BufferedWriter;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.InputMismatchException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.io.OutputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author Alex
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        OutputWriter out = new OutputWriter(outputStream);
        TaskB solver = new TaskB();
        solver.solve(1, in, out);
        out.close();
    }
    static class TaskB {
        double special(int[] loyalties, int[] levels, int playerlevelsum) {
            int poss = 1 << loyalties.length;
            double res = 0;
            for(int pos = 0; pos < poss; pos++) {
                double occurs = 1;
                int happy = 0;
                int badlevelssum = 0;
                for(int i = 0; i < loyalties.length; i++) {
                    if(((pos >> i) & 1) == 1) { //happy senator
                        happy++;
                        occurs *= (double) loyalties[i] / 100;
                    } else { //unhappy senator
                        badlevelssum += levels[i];
                        occurs *= (double) (100 - loyalties[i]) / 100;
                    }
                }
                double winprob = (happy <= levels.length / 2) ? (double) playerlevelsum / (playerlevelsum + badlevelssum) :
                        1;
//            System.err.println(pos + " " + (happy <= levels.length / 2) + " " + playerlevelsum + " " + (playerlevelsum + badlevelssum) + " " + occurs + " " + winprob + " " + occurs * winprob);
                res += occurs * winprob;
            }
            return res;
        }

        public void solve(int testNumber, InputReader in, OutputWriter out) {
            int senators = in.readInt(); // n, [1, 8]
            int sweets = in.readInt(); // k, [1, 8]
            int playerlevelsum = in.readInt(); // A, [1, 9999]
            int[] levels = new int[senators]; // [1, 9999]
            int[] loyalties = new int[senators]; // [0, 100] divisible by 10
            IOUtils.readIntArrays(in, levels, loyalties);
            ArrayList<ArrayList<Integer>> possibilities = new ArrayList<>(Arrays.asList(new ArrayList<>()));
            for(int senator = 0; senator < senators; senator++) {
                ArrayList<ArrayList<Integer>> newpossibilities = new ArrayList<>();
                for(ArrayList<Integer> al : possibilities) {
                    int sumsofar = 0;
                    for(int val : al) sumsofar += val;
                    int minadd = senator == senators - 1 ? sweets - sumsofar : 0;
                    for(int moar = minadd; moar <= sweets - sumsofar; moar++) {
                        ArrayList<Integer> copy = new ArrayList<>(al);
                        copy.add(moar);
                        newpossibilities.add(copy);
                    }
                }
                possibilities = newpossibilities;
            }
            double res = 0;
//        out.printLine(possibilities.size());
            for(ArrayList<Integer> al : possibilities) {
                int[] newloyalties = new int[senators];
                for(int i = 0; i < senators; i++) newloyalties[i] = Math.min(100, loyalties[i] + 10 * al.get(i));
//            out.printLine(al);
//            out.printLine(newloyalties);
//            double works = dp(0, 0, newloyalties);
                double special = special(newloyalties, levels, playerlevelsum);
                double tot = special;
                res = Math.max(res, tot);
            }
            out.printLine(res);
        }

    }

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private SpaceCharFilter filter;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if(numChars == -1)
                throw new InputMismatchException();
            if(curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch(IOException e) {
                    throw new InputMismatchException();
                }
                if(numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public int readInt() {
            int c = read();
            while(isSpaceChar(c))
                c = read();
            int sgn = 1;
            if(c == '-') {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do {
                if(c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            } while(!isSpaceChar(c));
            return res * sgn;
        }

        public boolean isSpaceChar(int c) {
            if(filter != null)
                return filter.isSpaceChar(c);
            return isWhitespace(c);
        }

        public static boolean isWhitespace(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);

        }

    }

    static class OutputWriter {
        private final PrintWriter writer;

        public OutputWriter(OutputStream outputStream) {
            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
        }

        public OutputWriter(Writer writer) {
            this.writer = new PrintWriter(writer);
        }

        public void print(Object... objects) {
            for(int i = 0; i < objects.length; i++) {
                if(i != 0)
                    writer.print(' ');
                writer.print(objects[i]);
            }
        }

        public void printLine(Object... objects) {
            print(objects);
            writer.println();
        }

        public void close() {
            writer.close();
        }

    }

    static class IOUtils {
        public static void readIntArrays(InputReader in, int[]... arrays) {
            for(int i = 0; i < arrays[0].length; i++) {
                for(int j = 0; j < arrays.length; j++)
                    arrays[j][i] = in.readInt();
            }
        }

    }
}