#include<iostream>#include<cstdio>#include<map>
using namespace std;typedeflonglong ll;constint N =5e6+7;const ll mod =1e9+7;
ll miu[N], v[N], sum[N];
map <ll, ll> m1;
ll power(ll a, ll b){
ll ans =1;while(b){if(b &1)
ans = ans * a % mod;
a = a * a % mod;
b >>=1;}return ans;}voidgetmiu(int n){for(int i =1; i <= n; i++)
miu[i]=1, v[i]=0;for(int i =2; i <= n; i++){if(v[i])continue;
miu[i]=-1;for(int j =2* i; j <= n; j += i){
v[j]=1;if((j / i)% i ==0)
miu[j]=0;else
miu[j]*=-1;}}for(int i =1; i <= n; i++)
sum[i]= sum[i -1]+ miu[i];}
ll getans(ll x){if(x <=5000000)return sum[x];if(m1[x])return m1[x];
ll ans =1;
ll l, r;for(l =2; l <= x; l = r +1){
r = x /(x / l);
ans -=getans(x / l)*(r - l +1);}return m1[x]= ans;}intmain(){getmiu(5000000);
ll n, k, l, r;scanf("%lld %lld %lld %lld",&n,&k,&l,&r);
l =(l + k -1)/ k -1, r = r / k;
ll ans =0;
ll i, j;for(i =1; i <= r; i = j +1){
j = r /(r / i);if(l >= i)
j =min(j, l /(l / i));
ll ans1 =getans(j)-getans(i -1);
ans1 =(ans1 % mod + mod)% mod;
ll ans2 =power(r / i - l / i, n);
ans2 =(ans2 % mod + mod)% mod;
ans1 = ans1 * ans2 % mod;
ans =(ans + ans1)% mod;}
ans =(ans % mod + mod)% mod;printf("%lld\n", ans);return0;}