#include #include using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000000000000000 int N,K,X,Y; vector B; vector> cnt(1024,vector(1024,0)); void dfs(int n,int x,int last){ if(n==0){ cnt[x][last]++; return; } rep(i,B.size()){ if(i==last)continue; dfs(n-1,x^B[i],i); } } int main(){ cin>>N>>K>>X>>Y; set A; rep(i,K){ int a; cin>>a; if(A.count(a))continue; A.insert(a); B.push_back(a); } /* rep(i,1024){ if(A.count(i))continue; B.push_back(i); } */ dfs(N/2,0,-1); vector Cnt(1024,0); rep(i,1024){ rep(j,1024)Cnt[i] += cnt[i][j]; } long long ans = 0; rep(i,1024){ rep(k,1024){ if(X<=(i^k)&&(i^k)<=Y){ rep(j,1024){ ans += cnt[i][j] * (Cnt[k]-cnt[k][j]); } } } } cout<