#include <bits/stdc++.h>
using namespace std;
const int N = 350;
const long long MOD = 1000 * 1000 * 1000LL + 7;
long long d[N][N][2];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m, x;
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0 << endl;
    return 0;
  }
  d[0][0][0] = 1;
  for (int k = 1; k <= m; k++) {
    bool f1 = k % 2, f2 = 1 - f1;
    d[0][0][f1] = (k >= x) ? 0 : 1;
    for (int i = 1; i <= n; i++)
      d[i][0][f1] = (d[i - 1][0][f2] + ((k == x) ? 0 : d[i][0][f2])) % MOD;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j < i; j++) {
        d[i][j][f1] = (d[i - 1][j][f2] + d[i][j - 1][f2] + d[i - 1][j - 1][f2] +
                       d[i][j][f2]) %
                      MOD;
        if (k == x) {
          d[i][j][f1] -= (d[i][j - 1][f2] + d[i][j][f2]);
          while (d[i][j][f1] < 0) d[i][j][f1] += MOD;
        }
      }
      d[i][i][f1] = (d[i - 1][i - 1][f2] + d[i][i - 1][f2] + d[i][i][f2]) % MOD;
      if (k == x) d[i][i][f1] = d[i - 1][i - 1][f2];
    }
  }
  long long ans = d[n][n][m % 2];
  for (int i = 1; i <= n; i++) ans *= i, ans %= MOD;
  cout << ans << endl;
  return 0;
}
