#include <vector>
#include <algorithm>
using namespace std;

class Over9000Rocks {
public:
    int countPossibilities(vector<int> lowerBound, vector<int> upperBound) {
        vector<pair<int, int>> segs;
        int n = lowerBound.size();
        for (int s = 1; s < (1 << n); ++s) {
            int mn = 0, mx = 0;
            for (int i = 0; i < n; ++i) {
                if (s & (1 << i)) {
                    mn += lowerBound[i];
                    mx += upperBound[i];
                }
            }
            segs.emplace_back(mn, mx);
        }
        sort(segs.begin(), segs.end());

        int prv = 9000, ans = 0;
        for (const auto& seg : segs) {
            if (prv < seg.first) {
                ans += seg.second - seg.first + 1;
                prv = seg.second;
            }
            else if (prv < seg.second) {
                ans += seg.second - prv;
                prv = seg.second;
            }
        }
        return ans;
    }
};