#include <stdio.h> #include <stdlib.h> typedef struct { int a; int b; } weapon; void sort(int data[],int lo,int hi) { int key=data[lo]; int l=lo; int h=hi; if (lo >= hi) return; while(l<h) { while(key<=data[h] && l<h) h--; data[l]=data[h]; while(data[l]<=key && l<h) l++; data[h]=data[l]; } data[h]=key; sort(data,lo,h-1); sort(data,h+1,hi); } int resolve (weapon arr[], int n, int k) { int i, j, l, m; int *p; int *result = (int *) malloc (sizeof (int) * n * n * k); int *tmp = (int *) malloc (sizeof (int) * n); for ( i = 0; i < n * k; ++i) result[i] = 0; l = 0; for (i = 0; i < k; ++i) { for (j = 0; j < n; ++j) tmp[j] = arr[j].a + (i + 1)* arr[j].b; if ( i == 0) { for (j = 0; j < n; ++j) result[l++] = tmp[j]; } else { for (j = 0; j < n; ++j) for ( m = j; m < n; ++m) result[l++] = tmp[j] + result[m]; for (j = 0; j < n; ++j) result[l++] = tmp[j]; } } sort (result, 0, l - 1); p = result; for (i = 0; i < k;) { if (i == 0 || *p != *(p - 1)) { ++i; } if (i < k) ++p; } return *p; } int main (int argc, char **argv) { int n, k, i; weapon *arr; scanf ("%d%d", &n, &k); arr = (weapon *) malloc (sizeof(weapon) * n); for (i = 0; i < n; ++i) { scanf ("%d%d", &(arr[i].a), &(arr[i].b)); } //for (i = 0; i < n; ++i) // printf ("%d, %d/n", arr[i].a, arr[i].b); printf ("%d/n", resolve (arr, n, k)); exit (0); }