#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T& x) {
  x = 0;
  char c;
  int sign = 1;
  do {
    c = getchar();
    if (c == '-') sign = -1;
  } while (!isdigit(c));
  do {
    x = x * 10 + c - '0';
    c = getchar();
  } while (isdigit(c));
  x *= sign;
}
const int N = 100;
int n, m, r;
long long k;
long long f[100005], g[100005];
long long F[100005], G[100005];
priority_queue<pair<long long, pair<long long, long long> > > q;
map<long long, long long> mp[100005];
int main() {
  scanf("%d%d%d%I64d", &n, &m, &r, &k);
  long long m1 = 0, m2 = 0;
  for (int i = 1; i <= n; i++) {
    f[i] = min(min(r, n - r + 1), min(i, n - i + 1));
    F[f[i]]++;
    m1 = max(m1, f[i]);
  }
  for (int i = 1; i <= m; i++) {
    g[i] = min(min(m - r + 1, r), min(i, m - i + 1));
    G[g[i]]++;
    m2 = max(m2, g[i]);
  }
  double ans = 0;
  long long cnt = 0;
  q.push(make_pair(m1 * m2, make_pair(m1, m2)));
  while (cnt < k) {
    pair<long long, pair<long long, long long> > tmp = q.top();
    while (mp[tmp.second.first].count(tmp.second.second))
      q.pop(), tmp = q.top();
    q.pop();
    long long cc = F[tmp.second.first] * G[tmp.second.second];
    mp[tmp.second.first][tmp.second.second] = 1;
    if (cc >= k - cnt) cc = k - cnt;
    ans = ans + tmp.first * cc;
    cnt = cnt + cc;
    m1 = tmp.second.first, m2 = tmp.second.second;
    q.push(make_pair((m1 - 1) * m2, make_pair(m1 - 1, m2)));
    q.push(make_pair(m1 * (m2 - 1), make_pair(m1, m2 - 1)));
  }
  ans = ans / double(n - r + 1);
  ans = ans / double(m - r + 1);
  printf("%.12lf", ans);
  return 0;
}
