原题链接


D. "Or" Game



time limit per test



memory limit per test



input



output


You are given n numbers a1, a2, ..., an. You can perform at most k operations. For each operation you can multiply one of the numbers by x. We want to make 

Codeforces Round #320 (Div. 2) - D. "Or" Game_#include

 as large as possible, where 

Codeforces Round #320 (Div. 2) - D. "Or" Game_#include_02

 denotes the bitwise OR.Find the maximum possible value of 

Codeforces Round #320 (Div. 2) - D. "Or" Game_#include

 after performing at most k

Input


The first line contains three integers nk and x (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 10, 2 ≤ x ≤ 8).

The second line contains n integers a1, a2, ..., an (0 ≤ ai ≤ 109).


Output


Output the maximum value of a bitwise OR of sequence elements after performing operations.


Examples


input


3 1 2
1 1 1


output


3


input


4 2 3
1 2 4 8


output


79


Note

For the first sample, any possible choice of doing one operation will result the same three numbers 1, 1, 2 so the result is 

Codeforces Round #320 (Div. 2) - D. "Or" Game_#include_04

.

For the second sample if we multiply 8 by 3 two times we'll get 72. In this case the numbers will become 1, 2, 4, 72 so the OR value will be 79



选二进制最高位最大的所有数把他们分别乘以k个x,观察结果


#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <queue>
#define MOD 10007
#define maxn 200005
using namespace std;
typedef long long ll;

ll num[maxn], p1[maxn], p2[maxn];
int main(){
	
	int n, k, x;
	scanf("%d%d%d", &n, &k, &x);
	for(int i = 1; i <= n; i++){
		scanf("%I64d", num+i);
		p1[i] = p1[i-1] | num[i];
	}
	for(int i = n; i >= 1; i--)
	  p2[i] = p2[i+1] | num[i];
	ll ans = 0;
	for(int i = 1; i <= n; i++){
		ll d = num[i];
		for(int j = 0; j < k; j++)
		  d *= x;
		ll p = d | p1[i-1] | p2[i+1];
		ans = max(ans, p);
	}
	printf("%I64d\n", ans);
	return 0;
}