Problem: Valera is a coder. Recently he wrote a funny program. The pseudo code for this program is given below:
    
    
      
    //input: integers x, k, p  
    a = x;  
    for(step = 1; step <= k; step = step + 1){  
        rnd = [random integer from 1 to 100];  
        if(rnd <= p)  
            a = a * 2;  
        else  
            a = a + 1;  
    }  
      
    s = 0;  
      
    while(remainder after dividing a by 2 equals 0){  
        a = a / 2;  
        s = s + 1;  
    }  
      
    

Now Valera wonders: given the values x, k and p, what is the expected value of the resulting number s?

Input

The first line of the input contains three integers x, k, p (1 ≤ x ≤ 109; 1 ≤ k ≤ 200; 0 ≤ p ≤ 100).

Output

Print the required expected value. Your answer will be considered correct if the absolute or relative error doesn't exceed 10 - 6.

Examples

Input

1 1 50


Output

1.0000000000000


Input

5 3 0


Output

3.0000000000000


Input

5 3 25


Output

1.9218750000000

Note

If the concept of expected value is new to you, you can read about it by the link: 

http://en.wikipedia.org/wiki/Expected_value

Solution (in JAVA):

Solution:
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;

public class Main {
    static int mod = (int)1e9+7;
    static int N = (int)1e5+10;
    int x, k, p;
    double[][] dp = new double[2][410];
    void work() throws Exception {
        //in = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
        //
        Scanner cin = new Scanner(System.in);
        /////////////////////////////////////////
        
        x = cin.nextInt();
        k = cin.nextInt();
        p = cin.nextInt();
        Arrays.fill(dp[0], 0);
        Arrays.fill(dp[1], 0);
        double P = p/100.0;
        for (int i = 0; i <= k; ++i) {
            int tmp = x+i;
            while(tmp%2==0) {
                tmp >>= 1;
                dp[0][i] += 1.0;
            }
        }
        int now = 0;  
        for(int i = 0; i < k; i++) {  
            Arrays.fill(dp[now^1], 0);
            for(int j = 0; j <= k; j++)  {  
                dp[now^1][j << 1] += (dp[now][j] + 1)*P;  
                dp[now^1][j] += dp[now][j + 1]*(1 - P);  
            }  
            now ^= 1;  
        }  
        out.println(df.format(dp[now][0]));         
    }
  //  BufferedReader in;
  //  StringTokenizer str = null;
    static PrintWriter out;
//    private String next() throws Exception{
//      while (str == null || !str.hasMoreElements())
//          str = new StringTokenizer(in.readLine());
//      return str.nextToken();
//    } 
//    private int nextInt() throws Exception{
//      return Integer.parseInt(next());
//    }
//    private long nextLong() throws Exception{
//      return Long.parseLong(next());
//    }
    static int dx[] = {0,1,0,-1};
    static int dy[] = {1,0,-1,0};
    class pair implements Comparable<pair>{
        int first, second;
        pair(int x, int y) {
            first = x;
            second = y;
        }
        public int compareTo(pair o) {
            // TODO auto-generated method stub
            if(first != o.first) return ((Integer)first).compareTo(o.first);
            else return ((Integer)second).compareTo(o.second); 
        }
    }
    DecimalFormat df=new DecimalFormat("0.000000");
    public static void main(String[] args) throws Exception{
        Main wo = new Main();
        wo.work();
        out.close();
    }
}