#include <bits/stdc++.h>
using namespace std;
const long long N = 500, OO = 1e8, M = 1e9 + 7, P = 6151, sq = 360, lg = 23;
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long n, m, x;
  cin >> n >> m >> x;
  if (n > m) return cout << 0, 0;
  long long dp[m + 10][n + 10][n + 10];
  memset(dp, 0, sizeof(dp));
  dp[0][0][0] = 1;
  for (long long i = 1; i <= m; i++) {
    if (i < x) dp[i][0][0] = 1;
    for (long long j = 1; j <= n; j++)
      for (long long k = 0; k <= j; k++)
        dp[i][j][k] =
            ((i != x) * dp[i - 1][j][k] + (k != 0) * dp[i - 1][j - 1][k - 1] +
             (k != 0 && i != x) * dp[i - 1][j][k - 1] + dp[i - 1][j - 1][k]) %
            M;
  }
  long long ans = dp[m][n][n];
  for (long long i = 1; i <= n; i++) ans = (ans * i) % M;
  cout << ans << endl;
  return 0;
}
