#include <bits/stdc++.h>
using namespace std;
double n, m, k, r;
double f(int x, int y) {
  x++;
  y++;
  return (min(n + 1, x + r) - max((double)x, r)) *
         (min(m + 1, y + r) - max((double)y, r));
}
int main() {
  cin >> n >> m >> r >> k;
  double ans = 0;
  double nbpos = (n - r + 1) * (m - r + 1);
  int tot = 0;
  priority_queue<pair<double, pair<int, int> > > q;
  pair<double, pair<int, int> > cur;
  q.push(make_pair(f(n / 2, m / 2), make_pair(n / 2, m / 2)));
  set<pair<int, int> > done;
  done.insert(make_pair(n / 2, m / 2));
  pair<int, int> pos;
  while (tot < k) {
    cur = q.top();
    pos = cur.second;
    q.pop();
    ans += cur.first;
    if (pos.first - 1 >= 0 &&
        done.find(make_pair(pos.first - 1, pos.second)) == done.end()) {
      q.push(make_pair(f(pos.first - 1, pos.second),
                       make_pair(pos.first - 1, pos.second)));
      done.insert(make_pair(pos.first - 1, pos.second));
    }
    if (pos.first + 1 < n &&
        done.find(make_pair(pos.first + 1, pos.second)) == done.end()) {
      q.push(make_pair(f(pos.first + 1, pos.second),
                       make_pair(pos.first + 1, pos.second)));
      done.insert(make_pair(pos.first + 1, pos.second));
    }
    if (pos.second - 1 >= 0 &&
        done.find(make_pair(pos.first, pos.second - 1)) == done.end()) {
      q.push(make_pair(f(pos.first, pos.second - 1),
                       make_pair(pos.first, pos.second - 1)));
      done.insert(make_pair(pos.first, pos.second - 1));
    }
    if (pos.second + 1 < m &&
        done.find(make_pair(pos.first, pos.second + 1)) == done.end()) {
      q.push(make_pair(f(pos.first, pos.second + 1),
                       make_pair(pos.first, pos.second + 1)));
      done.insert(make_pair(pos.first, pos.second + 1));
    }
    tot++;
  }
  cout << setprecision(11) << ans / nbpos << endl;
}
