#include <bits/stdc++.h>
inline long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline void sub(long long &a, long long b) {
  a -= b;
  if (a < 0) a += 1000000007;
}
inline void add(long long &a, long long b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
template <typename T>
inline T const &MAX(T const &a, T const &b) {
  return a > b ? a : b;
}
template <typename T>
inline T const &MIN(T const &a, T const &b) {
  return a < b ? a : b;
}
inline long long qp(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % 1000000007;
    a = a * a % 1000000007, b >>= 1;
  }
  return ans;
}
inline long long qp(long long a, long long b, long long c) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % c;
    a = a * a % c, b >>= 1;
  }
  return ans;
}
using namespace std;
const unsigned long long ba = 233;
const double eps = 1e-5;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1000000 + 10, maxn = 2000000 + 10, inf = 0x3f3f3f3f;
int a[N], b[N];
int sz = 1 << 20;
struct sgt {
  int mi[1 << 21];
  inline void build(int n) {
    memset(mi, inf, sizeof(mi));
    for (int i = 1; i <= n; i++) {
      mi[sz + i - 1] = i - 1;
    }
  }
  inline void update(int l, int r, int v) {
    for (l = l + sz - 1, r = r + sz - 1; l ^ r ^ 1; l >>= 1, r >>= 1) {
      if (~l & 1) mi[l ^ 1] = min(mi[l ^ 1], v);
      if (r & 1) mi[r ^ 1] = min(mi[r ^ 1], v);
    }
  }
  inline int query(int p) {
    int ans = inf;
    p += sz - 1;
    while (p) {
      ans = min(ans, mi[p]);
      p >>= 1;
    }
    return ans;
  }
} sg;
int main() {
  int n, x, y;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  sort(a, a + n);
  n = unique(a, a + n) - a;
  scanf("%d%d", &x, &y);
  for (int i = 0; i < n; i++) {
    int j = y / a[i] * a[i];
    while (j < y) j += a[i];
    for (; j <= x; j += a[i]) b[j - y] = max(b[j - y], a[i]);
  }
  sg.build(x - y + 1);
  for (int i = y; i < x; i++) {
    int te = sg.query(i - y + 1);
    sg.update(i + 1 - y + 1 - 1, i + 1 - y + 1 + 1, te + 1);
    if (b[i - y]) {
      sg.update(i + 1 - y + 1 - 1, min(x, i + b[i - y] - 1) - y + 1 + 1,
                te + 1);
    }
  }
  printf("%d\n", sg.query(x - y + 1));
  return 0;
}
