#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void Read(T &n) {
  char ch;
  bool flag = false;
  while (!isdigit(ch = getchar()))
    if (ch == '-') flag = true;
  for (n = ch ^ 48; isdigit(ch = getchar());
       n = (n << 1) + (n << 3) + (ch ^ 48))
    ;
  if (flag) n = -n;
}
const int MAXN = 1005;
int n, m;
double mat[MAXN][MAXN], f[MAXN][MAXN];
inline void Print() {
  for (register int i = 1; i <= m; i++, puts(""))
    for (register int j = 1; j <= m + 1; j++) printf("%.2lf ", mat[i][j]);
}
int main() {
  Read(n);
  Read(m);
  if (m == 1) {
    int x;
    Read(x);
    printf("%d\n", 2 * (n - x));
    return 0;
  }
  for (register int i = n - 1; i; i--) {
    for (register int j = 2; j < m; j++) mat[j][m + 1] = f[i + 1][j] + 4;
    mat[1][m + 1] = f[i + 1][1] + 3;
    mat[m][m + 1] = f[i + 1][m] + 3;
    for (register int j = 2; j < m; j++)
      mat[j][j] = 3, mat[j][j - 1] = mat[j][j + 1] = -1;
    mat[1][1] = mat[m][m] = 2;
    mat[1][2] = mat[m][m - 1] = -1;
    for (register int j = 1; j < m; j++) {
      mat[j + 1][j + 1] -= mat[j][j + 1] * mat[j + 1][j] / mat[j][j];
      mat[j + 1][m + 1] -= mat[j][m + 1] * mat[j + 1][j] / mat[j][j];
      mat[j + 1][j] = 0;
    }
    for (register int j = m; j > 1; j--) {
      mat[j - 1][m + 1] -= mat[j][m + 1] * mat[j - 1][j] / mat[j][j];
      mat[j - 1][j] = 0;
    }
    for (register int j = 1; j <= m; j++) f[i][j] = mat[j][m + 1] / mat[j][j];
  }
  int x, y;
  Read(x);
  Read(y);
  printf("%.10lf\n", f[x][y]);
  return 0;
}
