#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int MAX_N = 1111;
long long dp[2][MAX_N][MAX_N];
inline int sub(int a, int b) {
  if ((a -= b) < MOD) {
    a += MOD;
  }
  return a;
}
inline int add(int a, int b) {
  if ((a += b) >= MOD) {
    a -= MOD;
  }
  return a;
}
int N, M, X;
int main() {
  while (scanf("%d%d%d", &N, &M, &X) == 3) {
    long long ans = 0;
    if (N > M) {
      puts("0");
      continue;
    }
    X--;
    fill(dp[0][0], dp[0][N + 1], 0);
    dp[0][0][0] = 1;
    for (int i = 0; i < M; i++) {
      int pre = i & 1, cur = !pre;
      fill(dp[cur][0], dp[cur][N + 1], 0);
      for (int j = 0; j <= N; j++) {
        for (int k = 0; k <= j; k++) {
          if (dp[pre][j][k]) {
            if (i != X) {
              dp[cur][j][k] = add(dp[cur][j][k], dp[pre][j][k]);
              dp[cur][j][k + 1] = add(dp[cur][j][k + 1], dp[pre][j][k]);
            }
            dp[cur][j + 1][k] = add(dp[cur][j + 1][k], dp[pre][j][k]);
            dp[cur][j + 1][k + 1] = add(dp[cur][j + 1][k + 1], dp[pre][j][k]);
          }
        }
      }
    }
    ans = dp[M & 1][N][N];
    for (int i = 1; i <= N; i++) {
      ans = ans * i % MOD;
    }
    cout << ans << endl;
  }
  return 0;
}
