#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0;
  bool f = 0;
  char ch = ' ';
  while (!isdigit(ch)) {
    f |= (ch == '-');
    ch = getchar();
  }
  while (isdigit(ch)) {
    s = (s << 3) + (s << 1) + (ch ^ 48);
    ch = getchar();
  }
  return (f) ? (-s) : (s);
}
inline void write(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  write(x / 10);
  putchar((x % 10) + '0');
}
const int Mod = 1000000007;
int n, m, pot;
int dp[2][505][505];
inline void Ad(int &x, int y) {
  x += y;
  x -= (x >= Mod) ? Mod : 0;
}
int main() {
  int i, t, j, k;
  n = read();
  m = read();
  pot = read();
  if (n > m) return puts("0"), 0;
  dp[t = 0][0][0] = 1;
  for (i = 0; i < m; i++) {
    t ^= 1;
    for (j = 0; j <= n; j++)
      for (k = 0; k <= j; k++) dp[t][j][k] = 0;
    for (j = 0; j <= n; j++)
      for (k = 0; k <= j; k++) {
        Ad(dp[t][j + 1][k], dp[t ^ 1][j][k]);
        Ad(dp[t][j + 1][k + 1], dp[t ^ 1][j][k]);
        if (i + 1 != pot) {
          Ad(dp[t][j][k + 1], dp[t ^ 1][j][k]);
          Ad(dp[t][j][k], dp[t ^ 1][j][k]);
        }
      }
  }
  for (i = 1; i <= n; i++) dp[t][n][n] = 1LL * dp[t][n][n] * i % Mod;
  write(dp[t][n][n]), putchar('\n');
  return 0;
}
