#include <bits/stdc++.h>
using namespace std;
inline long long in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline long long lin() {
  long long x;
  scanf("%lld", &x);
  return x;
}
char ch[4000010];
inline string get() {
  scanf("%s", ch);
  return string(ch);
}
inline void read(long long *a, long long n) {
  for (long long i = 0; i < n; i++) a[i] = in();
}
template <class blank>
inline void out(blank x) {
  cout << x << "\n";
  exit(0);
}
template <class blank, class blank2>
inline void smin(blank &a, blank2 b) {
  a = a <= b ? a : b;
}
template <class blank, class blank2>
inline void smax(blank &a, blank2 b) {
  a = a >= b ? a : b;
}
const long long maxn = 1e6 + 10;
const long long maxm = 4e6 + 10;
const long long maxlg = 20;
const long long base = 29;
const long long mod = 1e9 + 7;
const long long inf = 2e18 + 10;
const double eps = 1e-9;
const long long SQ = 320;
long long dp[2][SQ][SQ];
int32_t main() {
  long long n = in(), m = in(), l = in();
  if (n > m) out(0);
  dp[0][0][0] = 1;
  for (long long i = 1; i <= m; i++) {
    long long fl = i & 1;
    long long prefl = fl ^ 1;
    for (long long j = 0; j <= n; j++)
      for (long long k = 0; k <= j; k++)
        (dp[fl][j][k] += (i == l ? 0 : dp[prefl][j][k]) +
                         (j && k ? dp[prefl][j - 1][k - 1] : 0)) %= mod;
    for (long long j = 0; j <= n; j++)
      for (long long k = 0; k <= j; k++)
        (dp[fl][j][k] += dp[fl][j][k + 1]) %= mod, dp[prefl][j][k] = 0;
  }
  long long res = dp[m & 1][n][0];
  for (long long i = 1; i <= n; i++) res = res * i % mod;
  cout << res << "\n";
}
