#include <bits/stdc++.h>
using namespace std;
int arr[100005];
int n, m, x;
void solve() {
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0;
    return;
  }
  int dp[m + 5][n + 2][n + 2];
  memset(dp, 0, sizeof(dp));
  dp[1][0][0] = 1;
  for (int i = 1; i < m + 1; i++) {
    for (int j = 0; j < n + 1; j++) {
      for (int k = 0; k < n + 1; k++) {
        int z = dp[i][j][k];
        if (i != x) {
          if (j > k) {
            dp[i + 1][j][k + 1] += z;
            dp[i + 1][j][k + 1] %= 1000000007;
          }
          dp[i + 1][j][k] += z;
          dp[i + 1][j][k] %= 1000000007;
        }
        if (j < n) {
          dp[i + 1][j + 1][k] += z;
          dp[i + 1][j + 1][k] %= 1000000007;
          dp[i + 1][j + 1][k + 1] += z;
          dp[i + 1][j + 1][k + 1] %= 1000000007;
        }
      }
    }
  }
  int ans = dp[m + 1][n][n];
  for (int i = 1; i < n + 1; i++) {
    ans = (1LL * ans * i) % 1000000007;
  }
  cout << ans;
}
signed main() {
  ios_base::sync_with_stdio(false);
  int t = 1;
  while (t--) solve();
  return 0;
}
