#include <bits/stdc++.h>
using namespace std;
long long dx[4] = {-1, 0, 1, 0};
long long dy[4] = {0, 1, 0, -1};
long long r;
long long n, m;
bool isSafe(long long x, long long y) {
  if (x >= 0 && y >= 0 && x < n && y < m) return true;
  return false;
}
long long fun(long long x, long long y) {
  long long ret = (min(n + 1, x + 1 + r) - max(x + 1, r)) *
                  (min(m + 1, y + 1 + r) - max(y + 1, r));
  return ret;
}
int main() {
  long long a[100005], t, i = 0, j, k, p, q, count = 0, flag = 0, ans = 0,
                          sum = 0, max1, min1, pos, tmp;
  t = 1;
  while (t--) {
    scanf("%lld%lld%lld%lld", &n, &m, &r, &k);
    long double ans = 0;
    p = n / 2;
    q = m / 2;
    set<pair<long long, pair<long long, long long> > > S;
    pair<long long, pair<long long, long long> > P;
    map<pair<long long, long long>, long long> M;
    S.insert(make_pair(fun(p, q), make_pair(p, q)));
    for (i = 0; i < k; i++) {
      P = *(S.rbegin());
      long long x = P.second.first;
      long long y = P.second.second;
      ans += 1.0 * P.first / (n - r + 1) / (m - r + 1);
      M[make_pair(x, y)] = 1;
      S.erase(P);
      if (isSafe(x, y + 1) && M[make_pair(x, y + 1)] != 1)
        S.insert(make_pair(fun(x, y + 1), make_pair(x, y + 1)));
      if (isSafe(x, y - 1) && M[make_pair(x, y - 1)] != 1)
        S.insert(make_pair(fun(x, y - 1), make_pair(x, y - 1)));
      if (isSafe(x + 1, y) && M[make_pair(x + 1, y)] != 1)
        S.insert(make_pair(fun(x + 1, y), make_pair(x + 1, y)));
      if (isSafe(x - 1, y) && M[make_pair(x - 1, y)] != 1)
        S.insert(make_pair(fun(x - 1, y), make_pair(x - 1, y)));
    }
    printf("%.20Lf\n", ans);
  }
  return 0;
}
