#include <fstream>
#ifdef _WIN32
    #include <io.h>
#else
    #include <stdlib.h>
#endif

#include "problem.h"
using namespace std;

static int N;
static int V[1000001];
static int L;
static int calls = 0;
static long long S[1000001];

static const int LIMIT = 400;

static void fail() {
    exit(0);
}

/// returneaza indicele ultimului jucator cu pozitia mai mica sau egala cu value
int getPoz(int value) {
    int st = 1, dr = N;
    while (st <= dr) {
        int mid = (st + dr) / 2;
        if (V[mid] > value)
            dr = mid-1;
        else
            st = mid+1;
    }
    return dr;
}

int getX(int poz) {
    if (++calls > LIMIT) fail();
    if (poz < 1 || poz > N) fail();
    return V[poz];
}

/// numarul de jucatori care au pozitia in intervalul [x1, x2]
int getNumber(int x1, int x2) {
    if (++calls > LIMIT) fail();
    /// cautam d = ultimul jucator cu pozitia <= x2
    /// cautam s = ultimul jucator cu pozitia <= x1-1
    int d = getPoz(x2);
    int s = getPoz(x1-1);
    return d-s;
}

/// suma pozitiilor jucatorilor din intervalul [x1, x2]
long long getSumX(int x1, int x2) {
    if (++calls > LIMIT) fail();
    int d = getPoz(x2);
    int s = getPoz(x1-1);
    return S[d]-S[s];
}

int main() {
    ifstream fin("tactica.in");

    fin>>N;

    for (int i=1;i<=N;i++) {
        fin>>V[i];
        S[i] = S[i-1] + V[i];
    }
    fin>>L;


    long long ans = solve(N, L);
    ofstream fout("tactica.out");
    fout<<ans<<" " << calls << "\n";
    return 0;
}

