#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  return x * f;
}
const int N = 1e5 + 5, P = 1e9 + 7;
int n, m, x, fac[N];
inline void Add(int &x, const int &y) {
  x += y;
  if (x > P) x -= P;
}
int main() {
  n = read(), m = read(), x = read();
  if (n > m) return puts("0"), 0;
  int dp[2][n + 5][n + 5];
  memset(dp, 0, sizeof(dp));
  dp[0][0][0] = 1;
  for (int i = (1); i <= (m); ++i) {
    int now = i & 1, pre = now ^ 1;
    memset(dp[now], 0, sizeof(dp[now]));
    for (int j = (0); j <= (n); ++j)
      for (int k = (0); k <= (j); ++k) {
        if (j > k && i != x) Add(dp[now][j][k + 1], dp[pre][j][k]);
        Add(dp[now][j + 1][k], dp[pre][j][k]);
        Add(dp[now][j + 1][k + 1], dp[pre][j][k]);
        if (i != x) Add(dp[now][j][k], dp[pre][j][k]);
      }
  }
  fac[0] = 1;
  for (int i = (1); i <= (n); ++i) fac[i] = 1ll * fac[i - 1] * i % P;
  printf("%lld\n", 1ll * dp[m & 1][n][n] * fac[n] % P);
  return 0;
}
