#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chkmax(T &x, const T &y) {
  if (x < y) x = y;
}
template <class T>
inline void chkmin(T &x, const T &y) {
  if (x > y) x = y;
}
const long long MAXN = (1 << 20);
long long n, m, a, d;
long long t[MAXN];
void read() {
  cin >> n >> m >> a >> d;
  for (long long i = 0; i < m; i++) cin >> t[i];
}
long long last, last_close, answer = 0;
void open_until(long long T) {
  if (last > n) return;
  long long x = d / a + 1;
  long long from = last, to = min(n, T / a);
  answer += (to - from + 1) / x + ((to - from + 1) % x != 0);
  last_close =
      d + (from + ((to - from + 1) / x - ((to - from + 1) % x == 0)) * x) * a;
  last = (last_close / a) + 1;
}
void solve() {
  last_close = 0, last = 1;
  for (long long i = 0; i < m; i++) {
    if (t[i] > last * a) open_until(t[i]);
    if (t[i] <= last_close) continue;
    last_close = t[i] + d;
    last = (last_close / a) + 1;
    answer++;
  }
  open_until((long long)2e18);
  cout << answer << '\n';
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
