#include <bits/stdc++.h>
using namespace std;
long long f[5001][5001];
int x[5001], a[5001], b[5001], c[5001], d[5001];
int s, e;
inline static bool can_give(int i, int j) {
  return j + (i >= s) - (i >= e) > 0;
}
inline static bool can_accept(int i, int j) { return j > 0; }
int main() {
  int n;
  scanf("%d%d%d", &n, &s, &e);
  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);
  memset(f, 0x3f, sizeof(f));
  f[0][0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= i - (i >= s); j++) {
      int jj = j + (i >= s) - (i >= e);
      if (i != n && !jj && !j) continue;
      if (jj < 0 || jj > i) continue;
      if (i == s) {
        if (j + 1 <= i - 1 && can_accept(i - 1, j + 1))
          f[i][j] = min(f[i][j], f[i - 1][j + 1] + x[i] + c[i]);
        f[i][j] = min(f[i][j], f[i - 1][j] - x[i] + d[i]);
      } else if (i == e) {
        if (j - 1 >= 0) f[i][j] = min(f[i][j], f[i - 1][j - 1] - x[i] + b[i]);
        if (can_give(i - 1, j))
          f[i][j] = min(f[i][j], f[i - 1][j] + x[i] + a[i]);
      } else {
        if (can_give(i - 1, j))
          f[i][j] = min(f[i][j], f[i - 1][j] + d[i] + a[i]);
        if (can_accept(i - 1, j))
          f[i][j] = min(f[i][j], f[i - 1][j] + c[i] + b[i]);
        if (j + 1 <= i - 1 && can_give(i - 1, j + 1) &&
            can_accept(i - 1, j + 1))
          f[i][j] = min(f[i][j], f[i - 1][j + 1] + x[i] + x[i] + a[i] + c[i]);
        if (j - 1 >= 0)
          f[i][j] = min(f[i][j], f[i - 1][j - 1] - x[i] - x[i] + b[i] + d[i]);
      }
    }
  }
  printf("%lld\n", f[n][0]);
  return 0;
}
