#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int id;
    int priority;
    int load;
} Server;

int main() {
    int N;
    if (scanf("%d", &N) != 1 || N <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    Server *servers = (Server *)malloc(sizeof(Server) * N);
    if (!servers) {
        printf("Invalid input\n");
        return 0;
    }

    for (int i = 0; i < N; i++) {
        int p, l;
        if (scanf("%d %d", &p, &l) != 2 || p < 0 || l < 0) {
            printf("Invalid input\n");
            free(servers);
            return 0;
        }
        servers[i].id = i + 1;
        servers[i].priority = p;
        servers[i].load = l;
    }

    int M;
    if (scanf("%d", &M) != 1 || M < 0) {
        printf("Invalid input\n");
        free(servers);
        return 0;
    }

    if (M == 0) {
        /
        free(servers);
        return 0;
    }

    for (int req = 0; req < M; req++) {
        int minIndex = 0;
        long long minWeightedLoad = (long long)servers[0].priority * servers[0].load;

        for (int i = 1; i < N; i++) {
            if (servers[i].priority < 0 || servers[i].load < 0) {
                printf("Invalid input\n");
                free(servers);
                return 0;
            }
            long long currentWeightedLoad = (long long)servers[i].priority * servers[i].load;
            if (currentWeightedLoad < minWeightedLoad) {
                minWeightedLoad = currentWeightedLoad;
                minIndex = i;
            } else if (currentWeightedLoad == minWeightedLoad && servers[i].id < servers[minIndex].id) {
                minIndex = i;
            }
        }

      
        printf("%d", servers[minIndex].id);
        if (req != M - 1) printf(" ");
        servers[minIndex].load++;
    }

    printf("\n");
    free(servers);
    return 0;
}