#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXM = 1e5;
const long long INF = 1e9;
struct pt {
  long long x, y;
  long long num;
  bool operator<(const pt &a) const { return num < a.num; }
};
long long n, m, r, k;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0};
long long cal(long long x, long long y) {
  long long res;
  res = (min(n, x + r) - max(x, r - 1)) * (min(m, y + r) - max(y, r - 1));
  return res;
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &m, &r, &k);
  long long midn = n / 2;
  long long midm = m / 2;
  set<pair<long long, long long> > st;
  st.insert(make_pair(midn, midm));
  pt p1;
  p1.x = midn;
  p1.y = midm;
  p1.num = cal(midn, midm);
  priority_queue<pt> q1;
  q1.push(p1);
  long long res = 0;
  for (long long i = 1; i <= k; i++) {
    pt now = q1.top();
    q1.pop();
    res = res + now.num;
    for (int j = 0; j < 4; j++) {
      long long nx = now.x + dx[j];
      long long ny = now.y + dy[j];
      if (nx >= 0 && nx < n && ny >= 0 && ny < m &&
          st.count(make_pair(nx, ny)) == 0) {
        st.insert(make_pair(nx, ny));
        pt np;
        np.x = nx;
        np.y = ny;
        np.num = cal(nx, ny);
        q1.push(np);
      }
    }
  }
  long long tp = (n - r + 1) * (m - r + 1);
  double ans = (double)res / (double)tp;
  printf("%.12lf\n", ans);
  return 0;
}
