#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int getDepth(int a) { int d = 1; while((1 << d) <= a) ++ d; return d - 1; } const int MOD = 1000000007; int main() { int d, l, r, k; cin >> d >> l >> r >> k; l = getDepth(l); r = getDepth(r); if(k < r - l || (k - (r - l)) % 2 != 0){ cout << 0 << endl; return 0; } int x = (k - (r - l)) / 2; if(l < x){ cout << 0 << endl; return 0; } long long ans = 1LL << r; ans *= 1LL << max(0, x-1); ans %= MOD; for(int i=0; i