#include <bits/stdc++.h>
using namespace std;
const long long md = 1e9 + 7;
int n, m, x, fkt[100001] = {};
vector<vector<vector<long long>>> dp;
int main() {
  cin >> n >> m >> x;
  if (m < n)
    cout << "0\n";
  else {
    fkt[0] = 1;
    for (int i = 1; i <= n; i++) fkt[i] = ((long long)fkt[i - 1] * i) % md;
    for (int i = 0; i < 2; i++) {
      dp.push_back(vector<vector<long long>>());
      for (int j = 0; j <= n + 1; j++) {
        dp[i].push_back(vector<long long>());
        for (int k = 0; k <= n + 1; k++) {
          dp[i][j].push_back(0);
        }
      }
    }
    dp[0][0][0] = 1;
    for (int i = 0; i < m; i++) {
      int cr = i & 1, nx = !(i & 1);
      for (int j = 0; j <= min(i + 1, n + 1); j++) {
        for (int k = 0; k <= j; k++) dp[nx][j][k] = 0;
      }
      for (int j = 0; j <= min(i, n); j++) {
        for (int k = 0; k <= j; k++) {
          if (i != x - 1) dp[nx][j][k] = (dp[nx][j][k] + dp[cr][j][k]) % md;
          dp[nx][j + 1][k + 1] = (dp[nx][j + 1][k + 1] + dp[cr][j][k]) % md;
          if (k) {
            if (i != x - 1)
              dp[nx][j][k - 1] = (dp[nx][j][k - 1] + dp[cr][j][k]) % md;
            dp[nx][j + 1][k] = (dp[nx][j + 1][k] + dp[cr][j][k]) % md;
          } else {
            dp[nx][j + 1][k] = (dp[nx][j + 1][k] + dp[cr][j][k]) % md;
          }
        }
      }
    }
    cout << (dp[m % 2][n][0] * fkt[n]) % md << "\n";
  }
  return 0;
}
