#include <bits/stdc++.h>
using namespace std;
using LL = long long;
LL a[5005];
LL b[5005];
LL c[5005];
LL d[5005];
LL x[5005];
LL dis[5005][5005];
LL nextpos[5005];
int main() {
  int n, StartPoint, EndPoint;
  scanf("%d %d %d", &n, &StartPoint, &EndPoint);
  for (int i = 1; i <= n; i++) scanf("%lld", &x[i]);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%lld", &b[i]);
  for (int i = 1; i <= n; i++) scanf("%lld", &c[i]);
  for (int i = 1; i <= n; i++) scanf("%lld", &d[i]);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j) {
        dis[i][j] = 0;
        continue;
      }
      if (j > i) {
        dis[i][j] = abs(x[i] - x[j]) + d[i] + a[j];
      } else {
        dis[i][j] = abs(x[i] - x[j]) + c[i] + b[j];
      }
    }
  }
  nextpos[StartPoint] = EndPoint;
  LL sum = dis[StartPoint][EndPoint];
  int GoodTargetPoint = 0;
  for (int PointToView = 1; PointToView <= n; PointToView++) {
    if (PointToView == StartPoint || PointToView == EndPoint) continue;
    LL MinDis = 10000000000000LL;
    for (int CurrentPoint = StartPoint; CurrentPoint != EndPoint;
         CurrentPoint = nextpos[CurrentPoint]) {
      LL tmp = dis[CurrentPoint][PointToView] +
               dis[PointToView][nextpos[CurrentPoint]] -
               dis[CurrentPoint][nextpos[CurrentPoint]];
      if (tmp < MinDis) {
        MinDis = tmp;
        GoodTargetPoint = CurrentPoint;
      }
    }
    sum += MinDis;
    nextpos[PointToView] = nextpos[GoodTargetPoint];
    nextpos[GoodTargetPoint] = PointToView;
  }
  printf("%lld\n", sum);
  return 0;
}
