func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:167772160000 )   using namespace std;   long long dp[5100][5100];   long long x[5100];   int a[5100], b[5100], c[5100], d[5100];   int main() {     int leftminright = 0;     int n, s, e;     cin >> n >> s >> e;     s--;     e--;     for (int i = 0; i < n; i++) cin >> x[i];     for (int i = 0; i < n; i++) cin >> a[i];     for (int i = 0; i < n; i++) cin >> b[i];     for (int i = 0; i < n; i++) cin >> c[i];     for (int i = 0; i < n; i++) cin >> d[i];     x[n] = 0;     for (int i = 0; i < n + 2; i++)       for (int j = 0; j < n + 2; j++) dp[i][j] = 1E18;     dp[0][0] = 0;     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         if (i != 0) {           if (j == 0 && leftminright != 1) continue;         }         if (i == s) {           leftminright--;           long long now = dp[i][j];           now += d[i];           dp[i + 1][j + 1] =               min(dp[i + 1][j + 1],                   now + (x[i + 1] - x[i]) * ((j + 1) * 2 + leftminright));           now -= d[i];           now += c[i];           if (j + leftminright + 1 > 0)             dp[i + 1][j] = min(dp[i + 1][j],                                now + (x[i + 1] - x[i]) * (j * 2 + leftminright));           leftminright++;           continue;         }         if (i == e) {           leftminright++;           long long now = dp[i][j];           now += b[i];           dp[i + 1][j] =               min(dp[i + 1][j], now + (x[i + 1] - x[i]) * (j * 2 + leftminright));           now -= b[i];           now += a[i];           if (j == 0) {             leftminright--;             continue;           }           dp[i + 1][j - 1] =               min(dp[i + 1][j - 1],                   now + (x[i + 1] - x[i]) * (2 * (j - 1) + leftminright));           leftminright--;           continue;         }         long long now = dp[i][j];         now += b[i];         now += d[i];         dp[i + 1][j + 1] =             min(dp[i + 1][j + 1],                 now + (x[i + 1] - x[i]) * ((j + 1) * 2 + leftminright));         now -= d[i];         now += c[i];         if (j + leftminright > 0)           dp[i + 1][j] =               min(dp[i + 1][j], now + (x[i + 1] - x[i]) * (j * 2 + leftminright));         now -= b[i];         now += a[i];         now -= c[i];         now += d[i];         if (j > 0)           dp[i + 1][j] =               min(dp[i + 1][j], now + (x[i + 1] - x[i]) * (j * 2 + leftminright));         now -= d[i];         now += c[i];         if (j > 0 && j + leftminright > 0)           dp[i + 1][j - 1] =               min(dp[i + 1][j - 1],                   now + (x[i + 1] - x[i]) * ((j - 1) * 2 + leftminright));       }       if (i == s) leftminright--;       if (i == e) leftminright++;     }     cout << dp[n][0];     return 0;   }   