#include <bits/stdc++.h>
const long long RXD = 1e9 + 7;
using namespace std;
long long now, f[2][330][330], n, m, x;
long long read() {
  long long x = 0, f = 1, c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
long long Solve() {
  f[0][0][0] = now = 1;
  for (long long i = 1; i <= m; i++, now ^= 1)
    for (long long l = 0; l <= n; l++)
      for (long long r = 0; r <= l; r++) {
        f[now][l][r] = 0;
        if (i == x) {
          if (l) f[now][l][r] = (f[now][l][r] + f[now ^ 1][l - 1][r]) % RXD;
          if (l && r)
            f[now][l][r] = (f[now][l][r] + f[now ^ 1][l - 1][r - 1]) % RXD;
        } else {
          f[now][l][r] = f[now ^ 1][l][r];
          if (l) f[now][l][r] = (f[now][l][r] + f[now ^ 1][l - 1][r]) % RXD;
          if (r) f[now][l][r] = (f[now][l][r] + f[now ^ 1][l][r - 1]) % RXD;
          if (l && r) f[now][l][r] = (f[now][l][r] + f[now ^ 1][l - 1][r - 1]);
        }
      }
  long long res = f[now ^ 1][n][n];
  for (long long i = 1; i <= n; i++) res = 1ll * res * i % RXD;
  return res;
}
int main() {
  n = read();
  m = read();
  x = read();
  if (n > m)
    return printf("0\n"), 0;
  else
    printf("%d\n", Solve());
}
