#include <bits/stdc++.h>
using namespace std;
vector<int> x, a, b, c, d;
long long count(int i, int j) {
  long long res = abs((long long)x[i] - (long long)x[j]);
  if (j < i) res += (long long)c[i] + (long long)b[j];
  if (j > i) res += (long long)d[i] + (long long)a[j];
  return res;
}
int main() {
  int n, s, e;
  scanf("%d %d %d", &n, &s, &e);
  a.resize(n);
  b.resize(n);
  c.resize(n);
  d.resize(n);
  x.resize(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &x[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &b[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &c[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &d[i]);
  }
  e--;
  s--;
  long long answer = 0LL;
  answer += count(s, e);
  vector<int> path = {s, e};
  for (int i = n - 1; i >= 0; --i) {
    long long best = 1e12;
    int bestplace = -1;
    if ((i != s) && (i != e)) {
      for (int j = 0; j < path.size() - 1; ++j) {
        long long delta = count(path[j], i) + count(i, path[j + 1]) -
                          count(path[j], path[j + 1]);
        if (delta < best) {
          best = delta;
          bestplace = j;
        }
      }
      answer += best;
      auto it = find(path.begin(), path.end(), path[bestplace]);
      it++;
      path.insert(it, i);
    }
  }
  printf("%I64d", answer);
  return 0;
}
