#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
typedef struct Locker 
{
    int num, left, right;
} Locker;
int main() 
{
    int N, T;
    if (scanf("%d", &N) != 1 || N < 1 || N > 10000)
    {
        printf("Invalid input\n");
        return 0;
    }
    Locker* arr = malloc(N * sizeof(Locker));
    int* present = calloc(100001, sizeof(int));
    for (int i = 0; i < N; ++i) 
    {
        if (scanf("%d %d %d", &arr[i].num, &arr[i].left, &arr[i].right) != 3) 
        
            printf("Invalid input\n");
            free(arr);
            free(present);
            return 0;
        }
        if (present[arr[i].num]) 
        { 
            printf("Invalid input\n");
            free(arr);
            free(present);
            return 0;
        }
        present[arr[i].num] = 1;
        if (arr[i].left != -1 && !present[arr[i].left] && arr[i].left <= 0) 
        {
            printf("Invalid input\n");
            free(arr);
            free(present);
            return 0;
        }
        if (arr[i].right != -1 && !present[arr[i].right] && arr[i].right <= 0) 
        {
            printf("Invalid input\n");
            free(arr);
            free(present);
            return 0;
        }
    }
    if (scanf("%d", &T) != 1) 
    {
        printf("Invalid input\n");
        free(arr);
        free(present);
        return 0;
    }
    int best = -1, min_dist = INT_MAX;
    for (int i = 0; i < N; ++i) 
    {
        int d = abs(arr[i].num - T);
        if (d < min_dist || (d == min_dist && arr[i].num < best))
        {
            best = arr[i].num;
            min_dist = d;
        }
    }
    printf("%d\n", best);
    free(arr);
    free(present);
    return 0;
}