#include <bits/stdc++.h>
using namespace std;
using lli = long long int;
using vi = vector<lli>;
using pii = pair<lli, lli>;
using vvi = vector<vi>;
using vii = vector<pii>;
using vvii = vector<vii>;
template <class A, class B>
ostream& operator<<(ostream& s, pair<A, B> const& v) {
  return s << '(' << get<0>(v) << ',' << get<1>(v) << ')';
}
template <class A, class B>
ostream& operator<<(ostream& s, tuple<A, B> const& v) {
  return s << '(' << get<0>(v) << ',' << get<1>(v) << ')';
}
template <class A, class B, class C>
ostream& operator<<(ostream& s, tuple<A, B, C> const& v) {
  return s << '(' << get<0>(v) << ',' << get<1>(v) << ',' << get<2>(v) << ')';
}
template <class A>
ostream& print_col(ostream& s, A const& v);
template <class A>
ostream& operator<<(ostream& s, vector<A> const& v) {
  return print_col(s, v);
}
template <class A>
ostream& operator<<(ostream& s, set<A> const& v) {
  return print_col(s, v);
}
template <class A, class B>
ostream& operator<<(ostream& s, map<A, B> const& v) {
  return print_col(s, v);
}
template <class A>
ostream& print_col(ostream& s, A const& v) {
  s << '[';
  for (auto const& x : v) s << x << ' ';
  return s << ']';
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  lli n, m, a, d;
  cin >> n >> m >> a >> d;
  vi A(m);
  for (lli i = 0; i < (m); ++i) cin >> A[i];
  lli i = 1;
  lli to = -1;
  lli ans = 0;
  lli niSingle = 1 + d / a;
  for (lli j = 0; j < (m); ++j) {
    if (A[j] <= to) continue;
  l1:;
    if (i <= n) {
      if (A[j] <= i * a) {
        ans += 1;
        to = A[j] + d;
        i = to / a + 1;
      } else if (A[j] <= i * a + d) {
        ans += 1;
        to = i * a + d;
        i = to / a + 1;
      } else {
        auto ok = [&](lli k) { return A[j] <= (i + k * niSingle) * a + d; };
        lli lo = 1;
        lli hi = 1;
        while (!ok(hi)) hi = hi + hi;
        while (lo != hi) {
          lli mi = (lo + hi) / 2;
          if (ok(mi))
            hi = mi;
          else
            lo = mi + 1;
        }
        if (i + niSingle * lo > n) {
          ans += (n - i + 1 + niSingle - 1) / niSingle;
          i = n + 1;
        } else {
          ans += lo;
          i += niSingle * lo;
        }
        goto l1;
      }
    } else {
      ans += 1;
      to = A[j] + d;
    }
  }
  if (i <= n) {
    ans += (n - i + 1 + niSingle - 1) / niSingle;
  }
  cout << ans << endl;
  return 0;
}
