#include <bits/stdc++.h>
using namespace std;
template <class C>
void mini(C& a4, C b4) {
  a4 = min(a4, b4);
}
template <class C>
void maxi(C& a4, C b4) {
  a4 = max(a4, b4);
}
template <class T1, class T2>
ostream& operator<<(ostream& out, pair<T1, T2> pair) {
  return out << "(" << pair.X << ", " << pair.Y << ")";
}
const int N = 1e3 + 5;
long long dp[N][N][2];
const int M = 1e9 + 7;
int main() {
  ios_base::sync_with_stdio(0);
  cout << fixed << setprecision(10);
  int n, m, d;
  cin >> n >> m >> d;
  ;
  if (n > m) {
    cout << "0\n";
    return 0;
  }
  long long res = 0;
  dp[0][0][0] = 1;
  int t = 1;
  for (int i = (1); i <= (m); ++i) {
    for (int j = (0); j <= (n); ++j) {
      for (int k = (j); k <= (n); ++k) {
        dp[j][k][t] = 0;
        for (int r1 = 0; r1 < (2); ++r1) {
          if (j < r1) {
            continue;
          }
          if (k > 0) {
            dp[j][k][t] += dp[j - r1][k - 1][1 - t];
          }
          if (i != d) {
            dp[j][k][t] += dp[j - r1][k][1 - t];
          }
        }
        dp[j][k][t] %= M;
      }
    }
    t = 1 - t;
  }
  res = dp[n][n][1 - t];
  for (int i = (1); i <= (n); ++i) {
    res *= i;
    res %= M;
  }
  cout << res << endl;
  return 0;
}
