#include <bits/stdc++.h>
using namespace std;
long long fact[100005];
int dp[32768000];
int n, m, x;
int call(int idx, int g, int total) {
  if (g > n || total > n) return 0;
  if (idx > m) {
    if (g == 0 && total == n) return fact[n];
    return 0;
  }
  int xx = ((n + 1) * (n + 1) * idx) + ((n + 1) * g) + total;
  if (dp[xx] != -1) return (long long)dp[xx];
  int ret = 0;
  ret += call(idx + 1, g + 1, total) % 1000000007;
  ret %= 1000000007;
  ret += call(idx + 1, g, total + 1) % 1000000007;
  ret %= 1000000007;
  if (g && idx != x) {
    ret += call(idx + 1, g - 1, total + 1);
    ret %= 1000000007;
    ret += call(idx + 1, g, total);
    ret %= 1000000007;
  }
  if (idx != x) {
    if (g == 0) ret += call(idx + 1, g, total);
    ret %= 1000000007;
  }
  return (dp[xx] = ret);
}
int main() {
  fact[0] = 1;
  for (long long i = 1; i < 100005; i++) {
    fact[i] = ((long long)fact[i - 1] * (long long)i) % 1000000007;
  }
  scanf("%d %d %d", &n, &m, &x);
  if (n > m) {
    printf("0\n");
    return 0;
  }
  memset(dp, -1, sizeof(dp));
  long long ans = call(1, 0, 0);
  printf("%lld", ans);
  return 0;
}
