#include <stdio.h>
#include <stdlib.h>

#define FIN "ghiozdan.in"
#define FOUT "ghiozdan.out"
#define FOK "ghiozdan.ok"

int cnt[256], N, G, GMax, NMin;

void error(char msg[], int p)
{
	fprintf(stderr, msg);
	printf("%d", p);
	exit(0);
}

int main(void)
{
    int i, x, nmin, gmax;
    FILE *f;

    f = fopen(FIN, "r");
    if (!f) error("Nu am putut deschide fisierul de intrare", 0);
    if (fscanf(f, "%d %d", &N, &G) != 2)
        error("Eroare in fisierul de intrare", 0);
    for (i = 0; i < N; i++)
    {
        if (fscanf(f, "%d", &x) != 1)
            error("Eroare in fisierul de intrare", 0);
        cnt[x]++;
    }

    f = fopen(FOK, "r");
    if (!f) error("Nu am putut deschide fisierul de verificare", 0);
    if (fscanf(f, "%d %d", &GMax, &NMin) != 2)
        error("Eroare in fisierul de verificare", 0);

    f = fopen(FOUT, "r");
    if (!f) error("Fisier de iesire inexistent", 0);
    if (fscanf(f, "%d %d", &gmax, &nmin) != 2)
        error("Raspuns gresit", 0);
    if (gmax != GMax || nmin != NMin)
        error("Raspuns gresit", 0);
    for (; nmin; nmin--)
    {
        if (fscanf(f, "%d", &x) != 1)
            error("Solutie gresita", 6);
        if (x < 1 || x > 200 || gmax-x < 0 || cnt[x] <= 0)
            error("Solutie gresita", 6);
        gmax -= x; cnt[x]--;
    }
    if (gmax) error("Solutie gresita", 6);
    error("OK", 10);

    return 0;
}
