Problem: 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

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
#define finish(x) return cout << x << endl, 0
#define ll long long

const int N = 51;

int n, k, s, t;
ll C[N][N], ways[N];
vector <int> a;

ll solve(vector <int> &b){
    ll ret = 0;
    for(int mask = 0 ; mask <= (t ^ s) ; mask++){
        if((mask & (t ^ s)) != mask) continue;
        int sign = (__builtin_popcount(mask) % 2 ? -1 : 1);
        int cnt = 0;
        for(auto &i : b){
            cnt += (i & mask) == 0;
        }
        ret += sign * ways[cnt];
    }
    return ret;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    C[0][0] = 1;
    for(int i = 1 ; i < N ; i++){
        for(int j = 0 ; j < N ; j++){
            C[i][j] = (j == 0 ? 0 : C[i - 1][j - 1]) + C[i - 1][j];
        }
    }
    cin >> n >> k >> s >> t;
    k--;
    if((s & t) != s) finish(0);
    for(int i = 0 ; i < n ; i++){
        int x;
        cin >> x;
        if((x & s) != s) continue;
        if((x | t) != t) continue;
        a.push_back(x);
    }
    n = a.size();
    for(int i = 0 ; i < N ; i++){
        for(int j = 0 ; j <= k ; j++){
            ways[i] += C[i][j];
        }
    }
    ll ans = 0;
    for(int i = 0 ; i < n ; i++){
        vector <int> b;
        for(int j = i + 1 ; j < n ; j++){
            b.push_back(a[i] ^ a[j]);
        }
        ans += solve(b);
    }
    cout << ans << endl;
}