param c{i in 1..3}; # objective
param a{i in 1..2, j in 1..3}; # constraints
param b{i in 1..2}; # right hand side
param l{i in 1..3}; # lower bound on x
var x{i in 1..3} >= 0 integer;
maximize profit: sum{i in 1..3} c[i]*x[i];
subject to time: sum{i in 1..3} a[1,i]*x[i] <= b[1];
subject to material: sum{i in 1..3} a[2,i]*x[i] <= b[2];
subject to agreement{i in 1..3}: x[i]>=l[i];