#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
inline int Max(int X, int Y) { return X < Y ? Y : X; }
inline int Min(int X, int Y) { return X < Y ? X : Y; }
inline long long Max(long long X, long long Y) { return X < Y ? Y : X; }
inline long long Min(long long X, long long Y) { return X < Y ? X : Y; }
unsigned long long n, m, r, k, nums, sums;
unsigned long long maxrr[250001], tot = 0;
set<unsigned long long> ss;
int main() {
  scanf("%I64u%I64u%I64u%I64u", &n, &m, &r, &k);
  nums = (n - r + 1) * (m - r + 1);
  if (r > 2000) {
    for (unsigned long long i = r - 500; i <= r; ++i)
      for (unsigned long long j = r - 500; j <= r; ++j)
        if (ss.count(i * j) == 0) ss.insert(i * j), maxrr[++tot] = i * j;
  }
  sort(maxrr + 1, maxrr + tot + 1);
  for (unsigned long long x =
           ((r + r <= n) ? r : (n - r + 1)) * ((r + r <= m) ? r : (m - r + 1));
       ; --x) {
    if (tot && maxrr[tot] <= x) x = maxrr[tot], --tot;
    unsigned long long sum = 0;
    for (unsigned long long y = (x - 1) / r + 1; y <= r; ++y) {
      if (x % y) continue;
      unsigned long long z = x / y;
      unsigned long long h = 0, s = 0;
      if (n >= r + r) {
        if (y == r) h += n - r - r;
        h += 2;
      } else {
        if (y == n - r + 1) h += r + r - n;
        if (y < n - r + 1) h += 2;
      }
      if (m >= r + r) {
        if (z == r) s += m - r - r;
        s += 2;
      } else {
        if (z == m - r + 1) s += r + r - m;
        if (z < m - r + 1) s += 2;
      }
      sum += h * s;
    }
    if (sum < k) {
      k -= sum;
      sums += x * sum;
    } else {
      sums += x * k;
      k = 0;
      break;
    }
  }
  printf("%.10f", (double)sums / nums);
  return 0;
}
