#include <bits/stdc++.h>
const int N = 100010;
using namespace std;
const double pi = acos(-1);
const double eps = 1e-6;
inline long long read() {
  long long f = 1, x = 0;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = -1;
  } while (ch < '0' || ch > '9');
  do {
    x = x * 10 + ch - '0';
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  return f * x;
}
template <typename T>
inline T max(T x, T y, T z) {
  return max(max(x, y), z);
}
template <typename T>
inline T min(T x, T y, T z) {
  return min(min(x, y), z);
}
template <typename T>
inline void read(T &x) {
  x = 0;
  T f = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = -1;
  } while (ch < '0' || ch > '9');
  do x = x * 10 + ch - '0', ch = getchar();
  while (ch <= '9' && ch >= '0');
  x *= f;
}
template <typename A, typename B>
inline A fpow(A x, B p, A yql) {
  A ans = 1;
  for (; p; p >>= 1, x = 1LL * x * x % yql)
    if (p & 1) ans = 1LL * x * ans % yql;
  return ans;
}
struct FastIO {
  static const int S = 1310720;
  int wpos;
  char wbuf[S];
  FastIO() : wpos(0) {}
  inline int xchar() {
    static char buf[S];
    static int len = 0, pos = 0;
    if (pos == len) pos = 0, len = fread(buf, 1, S, stdin);
    if (pos == len) return -1;
    return buf[pos++];
  }
  inline int read() {
    int c = xchar(), x = 0;
    while (c <= 32 && ~c) c = xchar();
    if (c == -1) return -1;
    for (; '0' <= c && c <= '9'; c = xchar()) x = x * 10 + c - '0';
    return x;
  }
} io;
int main() {
  long long n = read(), m = read(), a = read(), ans = 0, d = read();
  long long t = 0, e = 0, tt = d / a + 1;
  for (int i = 1; i <= m; ++i) {
    long long x = read();
    if (t < n) {
      int dd = min((x - 1) / a, n);
      if (dd > t) {
        ans += (dd - t - 1) / tt + 1;
        t += ((dd - t - 1) / tt + 1) * tt;
        e = min((t - tt + 1), n) * a + d;
        t = min(t, n);
      }
    }
    if (e < x) {
      ++ans;
      e = x + d;
      t = min(e / a, n);
    }
  }
  if (t < n) ans += (n - t - 1) / tt + 1;
  cout << ans;
}
