#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5010;
const long long int INF = 1000000000000000000LL;
int n, s, t;
int x[MAXN];
int a[MAXN];
int b[MAXN];
int c[MAXN];
int d[MAXN];
long long int dp[MAXN][MAXN];
long long int solve(int i, int qtdC) {
  if (qtdC < 0) return INF;
  if (max(s, t) < i && i <= n && qtdC == 1) return INF;
  long long int& ans = dp[i][qtdC];
  if (ans != -1) return ans;
  if (i == n + 1) {
    if (qtdC == 1) return ans = 0;
    return ans = INF;
  }
  ans = INF;
  int cS = (s <= i) ? 1 : 0;
  int cT = (t <= i) ? 1 : 0;
  if (i == s) {
    ans = min(ans, solve(i + 1, qtdC + 1) + (-x[i] + d[i]));
    if (qtdC > 0) ans = min(ans, solve(i + 1, qtdC) + (x[i] + c[i]));
  } else if (i == t) {
    ans = min(ans, solve(i + 1, qtdC + 1) + (-x[i] + b[i]));
    if (qtdC > 0) ans = min(ans, solve(i + 1, qtdC) + (x[i] + a[i]));
  } else {
    ans = min(ans, solve(i + 1, qtdC + 1) + (-x[i] + b[i]) + (-x[i] + d[i]));
    if (qtdC > 1)
      ans = min(ans, solve(i + 1, qtdC - 1) + (x[i] + c[i]) + (x[i] + a[i]));
    if (qtdC - cS > 0)
      ans = min(ans, solve(i + 1, qtdC) + (x[i] + c[i]) + (-x[i] + b[i]));
    if (qtdC - cT > 0)
      ans = min(ans, solve(i + 1, qtdC) + (x[i] + a[i]) + (-x[i] + d[i]));
  }
  return ans;
}
int main() {
  scanf("%d %d %d", &n, &s, &t);
  memset(dp, -1, sizeof(dp));
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &c[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
  printf("%lld\n", solve(1, 0));
}
