Given are N pairwise distinct non-negative integers A_1,A_2,\ldots,A_N. Find the number of ways to choose a set of between 1 and K numbers (inclusive) from the given numbers so that the following two conditions are satisfied:

* The bitwise AND of the chosen numbers is S.
* The bitwise OR of the chosen numbers is T.

Constraints

* 1 \leq N \leq 50
* 1 \leq K \leq N
* 0 \leq A_i < 2^{18}
* 0 \leq S < 2^{18}
* 0 \leq T < 2^{18}
* A_i \neq A_j (1 \leq i < j \leq N)

Input

Input is given from Standard Input in the following format:


N K S T
A_1 A_2 ... A_N


Output

Print the answer.

Examples

Input

3 3 0 3
1 2 3


Output

2


Input

5 3 1 7
3 4 9 1 5


Output

2


Input

5 4 0 15
3 4 9 1 5


Output

3

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int main() {
   ios_base::sync_with_stdio(false); cin.tie(nullptr);
   int N, K, S, T;
   cin >> N >> K >> S >> T;
   if ((S & T) != S) {
      cout << 0;
      return 0;
   }
   vector<int> A(N);
   for (int i = 0; i < N; ++i) cin >> A[i];
   vector<vector<ll>> C(N + 1, vector<ll>(N + 1));
   vector<ll> ways(N + 1);
   for (int i = 0; i <= N; ++i) {
      C[i][0] = 1;
      for (int j = 1; j <= i; ++j) {
         C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
         if (j <= K) ways[i] += C[i][j];
      }
   }
   ll ans = 0;
   for (int mask = 0; mask < (1 << 18); ++mask) {
      if ((mask & (S ^ T)) != mask) continue;
      map<int, int> cnts;
      for (int i = 0; i < N; ++i) {
         if ((A[i] & S) != S) continue;
         if ((A[i] | T) != T) continue;
         ++cnts[A[i] & mask];
      }
      int cf = __builtin_popcount(mask) & 1 ? -1 : 1;
      for (auto z : cnts) ans += cf * ways[z.second];
   }
   cout << ans << "\n";
}
