#include <bits/stdc++.h>
using namespace std;
long long extend_gcd(long long a, long long b, long long &x, long long &y) {
  if (a == 0 && b == 0) return -1;
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long d = extend_gcd(b, a % b, y, x);
  y -= a / b * x;
  return d;
}
long long m[10], a[10];
bool solve(long long &m0, long long &a0, long long m, long long a) {
  long long y, x;
  long long g = extend_gcd(m0, m, x, y);
  if (abs(a - a0) % g) return false;
  x *= (a - a0) / g;
  x %= m / g;
  a0 = (x * m0 + a0);
  m0 *= (m / g);
  a0 %= m0;
  if (a0 < 0) a0 += m0;
  return true;
}
bool MLES(long long &m0, long long &a0, int n) {
  bool flag = true;
  m0 = 1;
  a0 = 1;
  for (int i = 0; i < n; i++) {
    if (!solve(m0, a0, m[i], a[i])) {
      flag = false;
      break;
    }
  }
  return flag;
}
int main() {
  long long L, R;
  long long b1, b0;
  cin >> m[0] >> a[0] >> m[1] >> a[1] >> L >> R;
  b1 = a[1];
  b0 = a[0];
  if (a[1] < 0) {
    long long pl = (-a[1]) / m[1];
    a[1] = (a[1] + (pl + 1) * m[1]) % m[1];
  }
  if (a[0] < 0) {
    long long pl = (-a[0]) / m[0];
    a[0] = (a[0] + (pl + 1) * m[0]) % m[0];
  }
  long long m0, a0;
  if (!MLES(m0, a0, 2)) {
    puts("0");
    return 0;
  }
  long long gao = max(b1, b0);
  long long ans = 0;
  L = max(L, gao);
  if (L > R) {
    puts("0");
    return 0;
  }
  long long pu = ceil((L - a0) * 1.0 / m0);
  if (L == pu * m0 + a0) ans++, pu++;
  while (pu * m0 + a0 < L) pu++;
  L = pu * m0 + a0;
  if (L <= R) {
    ans++;
    ans += (R - L) / m0;
  }
  printf("%I64d\n", ans);
}
