时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
            空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
            Special Judge, 64bit IO Format: %lld
        
     
    题目描述
        
        
    
            
            有一种随机数生成器工作原理如下:
  它存储了若干个数据:一个大于 

 的整数 

,一个正整数 

 ,以及 

 个整数构成的数组 

,保证 

。 
 每次生成随机数时候,它先随机生成两个不相等的整数 

,随后返回 

 作为结果。 
 出于某种原因,你想让生成的随机数的期望值尽量大。经过一番友好交流,生成器的所有者允许你对内部数据进行若干次修改。 
 每次修改你可以任意指定 

,并翻转 

 的二进制表示中第 

 位。不过,你需要保证总修改次数不超过 

 次,且数组中任意 

 被修改不超过 

 次。 
 你想知道基于上述规则进行修改后,生成的随机数的期望值最大可以达到多少,输出这个最大值。
 
                            输入描述:
                                                    第一行输入四个整数 
,保证 
。
第二行输入 
 个整数 
,保证 
。
                                                                            输出描述:
                                                    输出一个浮点数,表示最大期望。要求相对误差小于 
。
                                                                            
                        
                            示例1
                        
                        
                            
                            
                                                            
                                    说明
                                    
                                        你没有机会进行任何修改,期望为 
。
                                     
                                 
                                                     
                     
                                    
                                    
                        
                            示例3
                        
                        
                            
                                输入
                                复制
                                
                                
                                    10 10 14 5
137 342 507 383 64 445 966 115 647 56