#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 5;
long long dat[maxn << 2];
long long A[maxn];
void PushUP(int rt) { dat[rt] = dat[rt << 1] | dat[rt << 1 | 1]; }
int cnt = 0;
void build(int l, int r, int rt) {
  if (l == r) {
    scanf("%I64d", &dat[rt]);
    A[cnt++] = dat[rt];
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
  PushUP(rt);
}
long long querry(int L, int R, int l, int r, int rt) {
  if (L <= l && r <= R) {
    return dat[rt];
  }
  int m = (l + r) >> 1;
  long long res = 0;
  if (m >= L) {
    res |= querry(L, R, l, m, rt << 1);
  }
  if (m < R) {
    res |= querry(L, R, m + 1, r, rt << 1 | 1);
  }
  return res;
}
int main() {
  int n, k, x;
  cin >> n >> k >> x;
  int tmp = 1;
  for (int i = 0; i < k; i++) {
    tmp *= x;
  }
  x = tmp;
  cnt = 0;
  build(1, n, 1);
  long long res = 0;
  for (int i = 0; i < cnt; i++) {
    long long t = 0;
    if (i + 1 > 1) {
      t |= querry(1, i, 1, n, 1);
    }
    if (i + 1 < n) {
      t |= querry(i + 2, n, 1, n, 1);
    }
    if ((t | (A[i] * x)) > res) {
      res = (t | (A[i] * x));
    }
  }
  cout << res << endl;
  return 0;
}
