#include using namespace std; typedef long long ll; #define all(x) (x).begin(),(x).end() const int mod=1000000007,MAX=100003,INF=1<<30; ll rui(ll a,ll b){ ll ans=1; while(b>0){ if(b&1) ans=ans*a%mod; a=a*a%mod; b/=2; } return ans; } ll per(ll a){ ll ans=1; for(ll i=a;i>0;i--){ ans=ans*i%mod; } return ans; } int main(){ int D,L,R,K;cin>>D>>L>>R>>K; vector maxi={1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575}; int l=distance(maxi.begin(),lower_bound(all(maxi),L)); int r=distance(maxi.begin(),lower_bound(all(maxi),R)); if(abs(l-r)>K||l+rr) swap(l,r); if(l==r){ ll choice=rui(2,K/2-1); ll ans=1; ans*=rui(2,l)*choice; ans%=mod; for(int i=0;i