#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
const double EPS = 1e-12;
const long long INF = 1LL << 29;
const long long mod = 1e9 + 7;
template <class T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  int n = v.size();
  for (long long(i) = 0; (i) < (long long)(n); ++(i))
    os << v[i] << (i == n - 1 ? "" : " ");
  return os;
}
long long n[2], r, k, s[2][100010], cnt[2][100010];
double res;
unordered_map<long long, bool> used;
int main() {
  cin >> n[0] >> n[1] >> r >> k;
  for (long long(i) = 0; (i) < (long long)(2); ++(i))
    for (long long(j) = 0; (j) < (long long)(n[i] - r + 1); ++(j)) {
      s[i][j]++;
      s[i][j + r]--;
    }
  for (long long(i) = 0; (i) < (long long)(2); ++(i))
    for (long long(j) = 0; (j) < (long long)(n[i]); ++(j))
      s[i][j + 1] += s[i][j];
  for (long long(i) = 0; (i) < (long long)(2); ++(i))
    for (long long(j) = 0; (j) < (long long)(n[i]); ++(j)) cnt[i][s[i][j]]++;
  long long p[2] = {1, 1};
  for (long long(i) = 0; (i) < (long long)(2); ++(i))
    while (cnt[i][p[i]++])
      ;
  p[0]--;
  p[1]--;
  priority_queue<pair<long long, pair<long long, long long> > > q;
  q.push(pair<long long, pair<long long, long long> >(
      p[0] * p[1], pair<long long, long long>(p[0], p[1])));
  while (!q.empty()) {
    pair<long long, pair<long long, long long> > pp = q.top();
    q.pop();
    long long p1 = pp.second.first, p2 = pp.second.second;
    long long t = min(k, cnt[0][p1] * cnt[1][p2]);
    res += t * p1 * p2;
    k -= t;
    if (k == 0) break;
    if (p1 > 1 && used[(p1 - 1) * 100010 + p2] != true) {
      used[(p1 - 1) * 100010 + p2] = true;
      q.push(pair<long long, pair<long long, long long> >(
          (p1 - 1) * p2, pair<long long, long long>(p1 - 1, p2)));
    }
    if (p2 > 1 && used[p1 * 100010 + p2 - 1] != true) {
      used[p1 * 100010 + p2 - 1] = true;
      q.push(pair<long long, pair<long long, long long> >(
          (p1) * (p2 - 1), pair<long long, long long>(p1, p2 - 1)));
    }
  }
  cout.precision(30);
  cout << res / ((n[0] - r + 1) * (n[1] - r + 1)) << endl;
  return 0;
}
