Querying posts with meta key and meta value not returning anything

I’m still not really sure how the values from your custom field is saved into the db, but your format in db does not match up with the format you are querying from meta_value. From your image it seems that you are saving 5 value under one custom field or in the format of es: xxxxxx which will never match es explicitely

To debug this, or to be really sure how your values are stored, run the following query and note the output from your custom field. You should take it from there then

$args = [
    'post_type' => 'page',
    'meta_key'  => 'program_skola'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        ?><pre><?php var_dump( get_post_meta( get_the_ID(), 'program_skola' ) ); ?></pre><?php

    }
    wp_reset_postdata();
}

EDIT

From your var_dump() from get_post_meta():

array (size=5)
  0 => string 'ek' (length=2)
  1 => string 'es' (length=2)
  2 => string 'nv' (length=2)
  3 => string 'sp' (length=2)
  4 => string 'tp' (length=2)

This is an array of values that is stored as a custom field single value. It is sad to say, but when you need custom field data for sorting or for searching functionality, you cannot use serialized data (values which are stored as arrays are serialized before storing) as it will never work (as you have seen). In general, and for no-problems-in-future approach, a custom field should be used to store only a single value for searching and ordering purposes

You should look to create a custom field for each and every value, and then use value like 0 and 1 as triggers. For instance, a post can have a field es with a value of either 0 or no or a value of 1 or yes. The other custom fields will be ek, nv etc as needed, each field with the value described. If you need to query posts with a custom field of es and that was marked as 1 (which will mean that, from what I can see, that the course is needed), you can query it as follow

$args = [
    'post_type'  => 'page',
    'meta_key'   => 'es',
    'meta_value' => 1
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        the_title();

    }
    wp_reset_postdata();
}

As for your current setup, the only thing I can quickly come up with is the following

$args = [
    'post_type' => 'page',
    'meta_key'  => 'program_skola'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        $meta = get_post_meta( get_the_ID(), 'program_skola' ) ); 
        if ( in_array( 'es', $meta ) ) {

            // Display posts with value 'es'
            the_title();

         }

    }
    wp_reset_postdata();
}

It should be noted that this is not very good for performance as you are querying posts which you do not need, which wastes time and db calls