#include <bits/stdc++.h>   using namespace std;   const long long N = 1e5 + 2;   const long long N1 = 1e2 + 2;   const long long mod = 1e9 + 7;   const int MASK = 1 << 17 + 1;   const int who = 6 * N * log2(N);   long long power(long long a, long long b, long long c) {     long long ret = 1;     while (b) {       if (b % 2 == 1) {         ret = (ret * a) % c;       }       b /= 2;       a = (a * a) % c;     }     return ret;   }   long long n, m, r, val;   long long a[N + 3], b[N + 3];   map<long long, long long> vis[N + 3];   vector<double> v;   bool calc(long long x, long long y) {     if (x < n && y < m && x >= 0 && y >= 0) {       if (vis[x][y] == 0) {         return true;       }     }     return false;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n >> m >> r >> val;     long long tot = n - r + 1;     for (int i = 0; i < n; i++) {       int sum = max(0, (int)(n - r - i)) + max(0, (int)(i - r + 1));       a[i] = tot - sum;     }     tot = m - r + 1;     for (int i = 0; i < m; i++) {       int sum = max(0, (int)(m - r - i)) + max(0, (int)(i - r + 1));       b[i] = tot - sum;     }     priority_queue<pair<double, pair<int, int> > > pq;     long long x = n / 2, y = m / 2;     vis[x][y] = 1;     pq.push(make_pair(a[x] * b[y], make_pair(x, y)));     while (!pq.empty() && v.size() < val) {       pair<double, pair<int, int> > tm = pq.top();       pq.pop();       v.push_back(tm.first);       long long test;       if (calc(tm.second.first - 1, tm.second.second + 0)) {         test = a[(tm.second.first - 1)] * b[(tm.second.second)];         vis[tm.second.first - 1][tm.second.second] = 1;         pq.push(             make_pair(test, make_pair(tm.second.first - 1, tm.second.second)));       }       if (calc(tm.second.first + 0, tm.second.second + 1)) {         test = a[(tm.second.first)] * b[(tm.second.second + 1)];         vis[tm.second.first][tm.second.second + 1] = 1;         pq.push(             make_pair(test, make_pair(tm.second.first, tm.second.second + 1)));       }       if (calc(tm.second.first + 0, tm.second.second - 1)) {         vis[tm.second.first][tm.second.second - 1] = 1;         test = a[(tm.second.first)] * b[(tm.second.second - 1)];         pq.push(             make_pair(test, make_pair(tm.second.first, tm.second.second - 1)));       }       if (calc(tm.second.first + 1, tm.second.second + 0)) {         vis[tm.second.first + 1][tm.second.second] = 1;         test = a[(tm.second.first + 1)] * b[(tm.second.second)];         pq.push(             make_pair(test, make_pair(tm.second.first + 1, tm.second.second)));       }     }     double res = 0, res1 = (n - r + 1) * (m - r + 1);     for (auto it : v) {       res += it;     }     printf( %.15lf n , res / res1);   }   