#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, x;
  cin >> n >> m >> x;
  if (n > m) {
    cout << "0\n";
    return 0;
  }
  long long dp[2][n + 10][n + 10];
  memset(dp, 0LL, sizeof dp);
  dp[0][0][0] = 1LL;
  for (int i = 1; i <= m; i++) {
    memset(dp[i % 2], 0LL, sizeof dp[i % 2]);
    for (int j = 0; j <= min(n, i); j++) {
      for (int k = 0; k <= min(n, i); k++) {
        if (i != x) {
          dp[i % 2][j][k] = (dp[i % 2][j][k] + dp[(i - 1) % 2][j][k]) % mod;
          if (j > 0)
            dp[i % 2][j - 1][k + 1] =
                (dp[i % 2][j - 1][k + 1] + dp[(i - 1) % 2][j][k]) % mod;
        }
        dp[i % 2][j + 1][k] =
            (dp[i % 2][j + 1][k] + dp[(i - 1) % 2][j][k]) % mod;
        dp[i % 2][j][k + 1] =
            (dp[i % 2][j][k + 1] + dp[(i - 1) % 2][j][k]) % mod;
      }
    }
  }
  long long ans = dp[m % 2][0][n];
  for (int i = 2; i <= n; i++) ans = (ans * (long long)i) % mod;
  cout << ans << "\n";
}
