#include <bits/stdc++.h>
                                        #include<iostream>
                                        #include<cstdio>
                                        #include<vector>
                                        #include<queue>
                                        #include<map>
                                        #include<cstring>
                                        #include<string>
                                        #include <math.h>
                                        #include<algorithm>
                                    //    #include <boost/multiprecision/cpp_int.hpp>
                                        #include<functional>
                                #define int long long
                                        #define inf  1000000007
                                        #define pa pair<int,int>
                                        #define ll long long
                                        #define pal pair<double,pa>
                                        #define ppa pair<int,int>
                                        #define ppap pair<pa,pa>
                                        #define ssa pair<string,int>
                                        #define  mp make_pair
                                        #define  pb push_back
                                        #define EPS (1e-10)
                                        #define equals(a,b) (fabs((a)-(b))<EPS)
                                  #define VI vector<int>
                                        using namespace std;
                                        
                                  class pas{
                                    	public:
                                    	int x,y;
                                    	pas(int x=0,int y=0):x(x),y(y) {}
                                    	pas operator + (pas p) {return pas(x+p.x,y+p.y);}
                                    	pas operator - (pas p) {return pas(x-p.x,y-p.y);}
                                    	pas operator * (int a) {return pas(x*a,y*a);}
                                    	pas operator / (int a) {return pas(x/a,y/a);}
                                    //	double absv() {return sqrt(norm());}
                                    	int norm() {return x*x+y*y;}
                                    	bool operator < (const pas &p) const{
                                    		return x != p.x ? x<p.x: y<p.y;
                                    	}
                                    	bool operator == (const pas &p) const{
                                    		return x==p.x && y==p.y;
                                    	}
                                    };
int n,V,W,K,N,L,R;
vector<pas> ve1,ve2;

//int dp[2][10001]={0};
int a[1010] ;
           signed main(){
      cin>>N>>K>>L>>R;
          int n1=N/2;
           	int n2=N-n1;
           	for(int i=0;i<N;i++)cin>>a[i];      	
           	for(int i=0;i<(1<<n1);i++){
           		int cnt=0,v=0;
           		for(int j=0;j<n1;j++)if(i&(1<<j)){
           		cnt++;
           			v+=a[j];
           		}
           			ve1.pb({cnt,v});
           	}
           	
           	for(int i=0;i<(1<<n2);i++){
           		int cnt=0,v=0;
           		for(int j=0;j<n2;j++)if(i&(1<<j)){
           		cnt++;
           			v+=a[j+n1];
           		}
           			ve2.pb({cnt,v});
           	}
           
           	int ans=0;
           	sort(ve2.begin(),ve2.end());
           	for(auto v:ve1){
       //a    		cout<<v.x<<" "<<v.y<<endl;
           			ans+=upper_bound(ve2.begin(),ve2.end(),(pas){K-v.x,R-v.y})-lower_bound(ve2.begin(),ve2.end(),(pas){K-v.x,L-v.y});
           	}
           	
           	cout<<ans<<endl;
           }
             

Measured memory_bytes: 43712