#include <bits/stdc++.h>
using namespace std;
const int mod = (1e9) + 7;
const int siz = (1e5) + 100;
int n, m, r, k;
long long getn(pair<int, int> a) {
  long long xa = min(a.first + 1, min(n - a.first, min(r, n - r + 1)));
  long long ya = min(a.second + 1, min(m - a.second, min(r, m - r + 1)));
  return xa * ya;
}
struct cmp {
  bool operator()(pair<int, int> a, pair<int, int> b) const {
    return getn(a) > getn(b);
  }
};
map<pair<int, int>, bool> used;
multiset<pair<int, int>, cmp> s;
vector<pair<int, int>> getps(int x, int y) {
  int xp = x + 1, xm = x - 1, yp = y + 1, ym = y - 1;
  vector<pair<int, int>> ret = {{xp, y}, {xm, y}, {x, yp}, {x, ym}};
  return ret;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &r, &k);
  pair<int, int> f = {n / 2, m / 2};
  s.insert(f);
  used[f] = true;
  long long tot = 0;
  for (int i = 0; i < k; i++) {
    auto it = s.begin();
    pair<int, int> p = *it;
    tot += getn(p);
    auto v = getps(p.first, p.second);
    for (auto val : v) {
      if (val.first < 0 || val.first >= n || val.second < 0 ||
          val.second >= m || used[val])
        continue;
      s.insert(val);
      used[val] = true;
    }
    s.erase(it);
  }
  long long deno = (long long)(n - r + 1) * (m - r + 1);
  printf("%.9lf\n", tot / (double)deno);
  return 0;
}
