#include <bits/stdc++.h>
using namespace std;
const int max_N = 1000 + 10;
const long long mod = 1e9 + 7;
int n, m, x;
long long dp[2][max_N][max_N], f[max_N];
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0 << endl;
    return 0;
  }
  dp[0][0][0] = 1;
  for (int i = 1; i <= m + 1; i++) {
    int o = i % 2, oo = 1 - o;
    if (i < x) dp[o][0][0] = 1;
    for (int j = 1; j <= min(n, m + 1); j++) {
      for (int k = 0; k <= j; k++) {
        dp[o][j][k] =
            ((k > 0) ? dp[oo][j - 1][k] + dp[oo][j - 1][k - 1] : 0) % mod;
        if (i != x) {
          dp[o][j][k] += dp[oo][j][k] + dp[oo][j][k + 1];
          dp[o][j][k] %= mod;
        }
      }
    }
    for (int j = 0; j < min(n, m + 1); j++)
      fill(dp[oo][j], dp[oo][j] + n + 10, 0);
  }
  f[0] = 1;
  for (int i = 1; i <= n; i++) f[i] = (f[i - 1] * i) % mod;
  cout << (long long)(dp[(m + 1) % 2][n][0] * f[n]) % mod << endl;
  return 0;
}
