#include <bits/stdc++.h>
double tick() {
  static clock_t oldt, newt = clock();
  double diff = 1.0 * (newt - oldt) / CLOCKS_PER_SEC;
  oldt = newt;
  return diff;
}
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, r, k;
  cin >> n >> m >> r >> k;
  long long int x = min(r, m - r + 1);
  long long int y = min(r, n - r + 1);
  long long int l = m - 2 * x + 2;
  long long int b = n - 2 * y + 2;
  long long int ans = 0, den = (n - r + 1) * (m - r + 1);
  if (k <= l * b) {
    ans += (x * y) * k;
    cout << fixed << setprecision(10) << (double)ans / (double)den;
    return 0;
  } else {
    ans += (x * y) * (l * b);
    k -= l * b;
  }
  multiset<pair<long long int, long long int>> sett;
  for (int i = 1; i < 1000LL; i++) {
    sett.insert({x * (y - i), 2 * l});
    sett.insert({(x - i) * y, 2 * b});
  }
  for (int i = 1; i < 1000LL; i++) {
    for (int j = 1; j < 1000LL; j++) {
      if (x - i < 0 && y - j < 0) {
        sett.insert({-(x - i) * (y - j), 4});
      } else {
        sett.insert({(x - i) * (y - j), 4});
      }
    }
  }
  while (k > 0) {
    auto nd = sett.rbegin();
    long long int val = nd->first, num = nd->second;
    if (k > num) {
      k -= num;
      ans += num * val;
    } else {
      ans += k * val;
      k = 0;
    }
    set<pair<long long int, long long int>>::iterator it = sett.end();
    sett.erase(--it);
  }
  cout << fixed << setprecision(10) << (double)ans / (double)den;
  return 0;
}
