Sometimes Mister B has free evenings when he doesn't know what to do. Fortunately, Mister B found a new game, where the player can play against aliens.

All characters in this game are lowercase English letters. There are two players: Mister B and his competitor.

Initially the players have a string s consisting of the first a English letters in alphabetical order (for example, if a = 5, then s equals to "abcde").

The players take turns appending letters to string s. Mister B moves first.

Mister B must append exactly b letters on each his move. He can arbitrary choose these letters. His opponent adds exactly a letters on each move.

Mister B quickly understood that his opponent was just a computer that used a simple algorithm. The computer on each turn considers the suffix of string s of length a and generates a string t of length a such that all letters in the string t are distinct and don't appear in the considered suffix. From multiple variants of t lexicographically minimal is chosen (if a = 4 and the suffix is "bfdd", the computer chooses string t equal to "aceg"). After that the chosen string t is appended to the end of s.

Mister B soon found the game boring and came up with the following question: what can be the minimum possible number of different letters in string s on the segment between positions l and r, inclusive. Letters of string s are numerated starting from 1.

Input

First and only line contains four space-separated integers: a, b, l and r (1 ≤ a, b ≤ 12, 1 ≤ l ≤ r ≤ 109) — the numbers of letters each player appends and the bounds of the segment.

Output

Print one integer — the minimum possible number of different letters in the segment from position l to position r, inclusive, in string s.

Examples

Input

1 1 1 8


Output

2

Input

4 2 2 6


Output

3

Input

3 7 4 6


Output

1

Note

In the first sample test one of optimal strategies generate string s = "abababab...", that's why answer is 2.

In the second sample test string s = "abcdbcaefg..." can be obtained, chosen segment will look like "bcdbc", that's why answer is 3.

In the third sample test string s = "abczzzacad..." can be obtained, chosen, segment will look like "zzz", that's why answer is 1.
#include <bits/stdc++.h>
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
const string alphabetLower = "abcdefghijklmnopqrstuvwxyz";
const string alphabetHigher = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string digits = "0123456789";
void read() {}
void print() {}
void debug() { cerr << endl; }
template <typename Arg, typename... Args>
void debug(Arg arg, Args... args) {
  cerr << arg << " ";
  debug(args...);
}
template <typename Arg, typename... Args>
void print(Arg arg, Args... args) {
  cout << setprecision(100) << arg << " ";
  print(args...);
}
template <typename Arg, typename... Args>
void read(Arg& arg, Args&... args) {
  cin >> arg;
  read(args...);
}
long long gcd(long long a, long long b) {
  if (a > b) swap(a, b);
  if (a) return gcd(a, b % a);
  return b;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long n, k, ans = 0, m, t, q;
vector<bool> vis(100000 + 1, 0);
unordered_map<int, unordered_set<int>> g;
struct c {
  string name;
  int ver;
  c() {}
  c(string name, int ver) : name(name), ver(ver){};
  bool operator==(string a) const { return this->name == a; }
  bool operator!=(c a) const { return !(*this == a); }
  bool operator==(c a) const {
    return this->name == a.name && this->ver == a.ver;
  };
  bool operator<(c a) const {
    return (this->name == a.name ? this->ver < a.ver : this->name < a.name);
  };
};
void run() {
  int a, b, l, r;
  read(a, b, l, r);
  l--;
  r--;
  int cl = l / (a + b), cr = r / (a + b);
  int ml = l % (a + b), mr = r % (a + b);
  if (cl == cr) {
    if (ml < a && mr < a)
      cout << mr - ml + 1;
    else if (ml < a && a <= mr)
      cout << a - ml;
    else
      cout << 1;
  } else if (a <= b) {
    if (cl < cr - 1 || mr >= a)
      cout << a + 1;
    else if (ml >= a)
      cout << mr + 2;
    else if (mr >= ml)
      cout << a + (mr + 1 == a);
    else
      cout << mr - ml + a + (mr + 1 == a) + 1;
  } else {
    int d = a - b;
    if (cl == cr - 1) {
      if (mr >= a && ml >= a)
        cout << a + 1;
      else if (mr < a && ml >= a)
        cout << mr + 2;
      else if (mr >= a && ml < a)
        cout << min(2 * a - ml, 2 * a - b);
      else if (mr < a && ml < a) {
        int k = mr + 1 + a;
        if (ml > b)
          cout << k - ml;
        else
          cout << k - b;
      }
    } else if (cl + 2 == cr) {
      if ((mr >= a && ml >= a) || (mr >= a && ml < a))
        cout << 2 * a - b;
      else
        cout << a + max(1, d + min(0, mr - a + 1 + max(0, a - ml)));
    } else
      cout << a * 2 - b;
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  run();
  return 0;
}
