#include <bits/stdc++.h>
using namespace std;
const long long M = 1000 * 1000 * 1000 + 7;
const long long maxm = 100010;
long long dp[2][1010][1010];
long long fact[maxm];
int32_t main() {
  long long m, n, x;
  cin >> n >> m >> x;
  fact[0] = 1;
  for (long long i = 1; i < maxm; i++) {
    (fact[i] = fact[i - 1] * i) %= M;
  }
  if (m < n) {
    cout << 0 << endl;
    return 0;
  }
  dp[0][0][0] = 1;
  for (long long i = 1; i <= m; i++) {
    if (i < x) dp[1][0][0] = 1;
    for (long long j = 1; j <= n; j++) {
      for (long long k = 0; k <= j; k++) {
        (dp[1][j][k] = dp[0][j - 1][k]) %= M;
        if (k > 0) (dp[1][j][k] += dp[0][j - 1][k - 1]) %= M;
        if (i != x) {
          (dp[1][j][k] += dp[0][j][k + 1]) %= M;
          (dp[1][j][k] += dp[0][j][k]) %= M;
        }
      }
    }
    for (long long j = 0; j <= n; j++) {
      for (long long k = 0; k <= j; k++) {
        dp[0][j][k] = dp[1][j][k];
        dp[1][j][k] = 0;
      }
    }
  }
  cout << (dp[0][n][0] * fact[n]) % M << endl;
}
