#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m, r, k;
long long get(int x, int y) {
  long long a = min(n - r + 1, x) - max(1, x - r + 1) + 1;
  long long b = min(m - r + 1, y) - max(1, y - r + 1) + 1;
  return a * b;
}
using pll = pair<long long, long long>;
set<pair<long long, pll>> s;
set<pll> vis;
void add(int x, int y) {
  if (x < 1 || x > n || y < 1 || y > m) return;
  pll t = {x, y};
  if (vis.find(t) == vis.end()) {
    vis.insert(t);
    s.insert({-get(x, y), t});
  }
}
int main() {
  while (cin >> n >> m >> r >> k) {
    long long res = 0;
    add(r, r);
    while (k--) {
      auto cur = *s.begin();
      s.erase(s.begin());
      res -= cur.first;
      long long x = cur.second.first;
      long long y = cur.second.second;
      add(x + 1, y);
      add(x - 1, y);
      add(x, y + 1);
      add(x, y - 1);
    }
    long double ans = res;
    ans /= 1ll * (n - r + 1) * (m - r + 1);
    cout << fixed << setprecision(10) << ans << endl;
  }
  return 0;
}
