#include <bits/stdc++.h>
using namespace std;
long long dp[20000010];
long long expect, total, val;
long long hash_val_generator(long long pos, long long open, long long take) {
  return (pos * (val + 1) * (val + 1) + take * (val + 1) + open) % 20000000;
}
long long calc(long long pos, long long open, long long take) {
  if (open < 0 || take > val) return 0;
  if (dp[hash_val_generator(pos, open, take)] != -1)
    return dp[hash_val_generator(pos, open, take)];
  if (pos == total + 1) {
    if (take == val && !open) return 1;
    return 0;
  }
  long long ans = 0;
  ans += calc(pos + 1, open + 1, take + 1);
  ans += calc(pos + 1, open, take + 1);
  if (pos != expect) {
    ans += calc(pos + 1, open - 1, take);
    ans += calc(pos + 1, open, take);
  }
  return dp[hash_val_generator(pos, open, take)] = ans % 1000000007;
}
int main() {
  scanf("%lld %lld %lld", &val, &total, &expect);
  memset(dp, -1, sizeof dp);
  long long tp = 1;
  if (total >= val) {
    tp *= calc(1, 0, 0);
    for (long long i = 1; i <= val; i++) {
      tp *= i;
      tp %= 1000000007;
    }
  } else
    tp = 0;
  printf("%lld\n", tp % 1000000007);
}
