#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>

using namespace std;

const long long MOD = 1e9 + 7;

long long cnt = 0;
vector<long long> A;
unordered_map<long long, long long> memo[305]; // Giới hạn mảng theo số lượng phần tử tối đa

// Hàm tính lũy thừa nhị phân cho 2^cnt
long long power(long long base, long long exp) {
    long long res = 1;
    base %= MOD;
    while (exp > 0) {
        if (exp % 2 == 1) res = (res * base) % MOD;
        base = (base * base) % MOD;
        exp /= 2;
    }
    return res;
}

// Quy hoạch động đệ quy có nhớ theo chuẩn logic chỉ định
long long dp(int i, long long j) {
    if (i == 0) {
        if (j == 0) return 0;
        else return 1;
    }
    
    if (j == 0) return 0;
    if (j == 1) return 1;

    // Trả về nếu đã lưu trong map
    if (memo[i].count(j)) return memo[i][j];

    // Gọi đệ quy: Không chọn A[i-1] + Chọn A[i-1]
    long long res = dp(i - 1, j);
    res = (res + dp(i - 1, j / A[i - 1])) % MOD; // A[i-1] do vector đánh index từ 0

    return memo[i][j] = res;
}

int main() {
    // Tối ưu I/O
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int Q;
    long long L, R;
    if (!(cin >> Q >> L >> R)) return 0;

    while (Q--) {
        char type;
        long long x;
        cin >> type >> x;

        // Xử lý thao tác Thêm / Xóa
        if (type == '+') {
            if (x == 1) {
                cnt++;
            } else {
                A.push_back(x);
                sort(A.begin(), A.end()); // Đảm bảo dãy tăng dần
            }
        } else if (type == '-') {
            if (x == 1) {
                cnt--;
            } else {
                auto it = find(A.begin(), A.end(), x);
                if (it != A.end()) {
                    A.erase(it);
                }
            }
        }

        int n = A.size();
        
        // Clear mảng nhớ trạng thái trước khi đệ quy lại từ đầu
        for (int i = 0; i <= n; i++) {
            memo[i].clear();
        }

        // Tính kết quả cho đoạn [L, R]
        long long ansR = dp(n, R);
        long long ansL = (L > 1) ? dp(n, L - 1) : 0;

        // Áp dụng công thức số cách = (dp(R) - dp(L-1)) * 2^cnt
        long long final_ans = (ansR - ansL + MOD) % MOD;
        final_ans = (final_ans * power(2, cnt)) % MOD;

        cout << final_ans << "\n";
    }

    return 0;
}